Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mdn/yari

Package Overview
Dependencies
Maintainers
5
Versions
2690
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mdn/yari - npm Package Compare versions

Comparing version 2.62.0 to 2.63.0

client/build/static/css/main.a961f482.css

2

.release-please-manifest.json
{
".": "2.62.0"
".": "2.63.0"
}

@@ -8,6 +8,7 @@ import fs from "node:fs";

import { m2h } from "../markdown/index.js";
import * as kumascript from "../kumascript/index.js";
import { VALID_LOCALES, MDN_PLUS_TITLE, DEFAULT_LOCALE, OBSERVATORY_TITLE_FULL, OBSERVATORY_TITLE, } from "../libs/constants/index.js";
import { CONTENT_ROOT, CONTENT_TRANSLATED_ROOT, CONTRIBUTOR_SPOTLIGHT_ROOT, BUILD_OUT_ROOT, DEV_MODE, } from "../libs/env/index.js";
import { isValidLocale } from "../libs/locale-utils/index.js";
import { getSlugByBlogPostUrl, splitSections } from "./utils.js";
import { getSlugByBlogPostUrl, makeTOC } from "./utils.js";
import { findByURL } from "../content/document.js";

@@ -17,2 +18,4 @@ import { buildDocument } from "./index.js";

import { buildSitemap } from "./sitemaps.js";
import { extractSections } from "./extract-sections.js";
import { wrapTables } from "./wrap-tables.js";
const FEATURED_ARTICLES = [

@@ -25,6 +28,6 @@ "blog/mdn-scrimba-partnership/",

const LATEST_NEWS = [
"blog/mdn-scrimba-partnership/",
"blog/mdn-http-observatory-launch/",
"blog/mdn-curriculum-launch/",
"blog/baseline-evolution-on-mdn/",
"blog/introducing-the-mdn-playground/",
];

@@ -38,7 +41,24 @@ const PAGE_DESCRIPTIONS = Object.freeze({

const profileImg = "profile-image.jpg";
let featuredContributorFrontmatter;
for (const contributor of fs.readdirSync(contributorSpotlightRoot)) {
const markdown = fs.readFileSync(`${contributorSpotlightRoot}/${contributor}/index.md`, "utf-8");
const file = `${contributorSpotlightRoot}/${contributor}/index.md`;
const markdown = fs.readFileSync(file, "utf-8");
const url = `/${locale}/${prefix}/${contributor}`;
const frontMatter = frontmatter(markdown);
const contributorHTML = await m2h(frontMatter.body, { locale });
const { sections } = splitSections(contributorHTML);
const d = {
url,
rawBody: contributorHTML,
metadata: {
locale: DEFAULT_LOCALE,
slug: `${prefix}/${contributor}`,
url,
},
isMarkdown: true,
fileInfo: {
path: file,
},
};
const [$] = await kumascript.render(url, {}, d);
const [sections] = await extractSections($);
const hyData = {

@@ -69,9 +89,12 @@ sections: sections,

if (frontMatter.attributes.is_featured) {
return {
contributorName: frontMatter.attributes.contributor_name,
url: `/${locale}/${prefix}/${frontMatter.attributes.folder_name}`,
quote: frontMatter.attributes.quote,
};
featuredContributorFrontmatter = frontMatter.attributes;
}
}
return featuredContributorFrontmatter
? {
contributorName: featuredContributorFrontmatter.contributor_name,
url: `/${locale}/${prefix}/${featuredContributorFrontmatter.folder_name}`,
quote: featuredContributorFrontmatter.quote,
}
: undefined;
}

@@ -212,4 +235,20 @@ export async function buildSPAs(options) {

const rawHTML = await m2h(frontMatter.body, { locale });
const { sections, toc } = splitSections(rawHTML);
const url = `/${locale}/${slug}/${page}`;
const d = {
url,
rawBody: rawHTML,
metadata: {
locale: DEFAULT_LOCALE,
slug: `${slug}/${page}`,
url,
},
isMarkdown: true,
fileInfo: {
path: file,
},
};
const [$] = await kumascript.render(url, {}, d);
wrapTables($);
const [sections] = await extractSections($);
const toc = makeTOC({ body: sections });
const hyData = {

@@ -216,0 +255,0 @@ id: page,

@@ -10,2 +10,3 @@ import fs from "node:fs";

import { m2h } from "../markdown/index.js";
import * as kumascript from "../kumascript/index.js";

@@ -28,3 +29,3 @@ import {

import { DocFrontmatter, DocParent, NewsItem } from "../libs/types/document.js";
import { getSlugByBlogPostUrl, splitSections } from "./utils.js";
import { getSlugByBlogPostUrl, makeTOC } from "./utils.js";
import { findByURL } from "../content/document.js";

@@ -36,2 +37,4 @@ import { buildDocument } from "./index.js";

import { HydrationData } from "../libs/types/hydration.js";
import { extractSections } from "./extract-sections.js";
import { wrapTables } from "./wrap-tables.js";

@@ -46,6 +49,6 @@ const FEATURED_ARTICLES = [

const LATEST_NEWS: (NewsItem | string)[] = [
"blog/mdn-scrimba-partnership/",
"blog/mdn-http-observatory-launch/",
"blog/mdn-curriculum-launch/",
"blog/baseline-evolution-on-mdn/",
"blog/introducing-the-mdn-playground/",
];

@@ -66,13 +69,27 @@

const profileImg = "profile-image.jpg";
let featuredContributorFrontmatter: DocFrontmatter;
for (const contributor of fs.readdirSync(contributorSpotlightRoot)) {
const markdown = fs.readFileSync(
`${contributorSpotlightRoot}/${contributor}/index.md`,
"utf-8"
);
const file = `${contributorSpotlightRoot}/${contributor}/index.md`;
const markdown = fs.readFileSync(file, "utf-8");
const url = `/${locale}/${prefix}/${contributor}`;
const frontMatter = frontmatter<DocFrontmatter>(markdown);
const contributorHTML = await m2h(frontMatter.body, { locale });
const d = {
url,
rawBody: contributorHTML,
metadata: {
locale: DEFAULT_LOCALE,
slug: `${prefix}/${contributor}`,
url,
},
const { sections } = splitSections(contributorHTML);
isMarkdown: true,
fileInfo: {
path: file,
},
};
const [$] = await kumascript.render(url, {}, d);
const [sections] = await extractSections($);

@@ -110,10 +127,15 @@ const hyData = {

}
if (frontMatter.attributes.is_featured) {
return {
contributorName: frontMatter.attributes.contributor_name,
url: `/${locale}/${prefix}/${frontMatter.attributes.folder_name}`,
quote: frontMatter.attributes.quote,
};
featuredContributorFrontmatter = frontMatter.attributes;
}
}
return featuredContributorFrontmatter
? {
contributorName: featuredContributorFrontmatter.contributor_name,
url: `/${locale}/${prefix}/${featuredContributorFrontmatter.folder_name}`,
quote: featuredContributorFrontmatter.quote,
}
: undefined;
}

@@ -286,5 +308,22 @@

const { sections, toc } = splitSections(rawHTML);
const url = `/${locale}/${slug}/${page}`;
const d = {
url,
rawBody: rawHTML,
metadata: {
locale: DEFAULT_LOCALE,
slug: `${slug}/${page}`,
url,
},
const url = `/${locale}/${slug}/${page}`;
isMarkdown: true,
fileInfo: {
path: file,
},
};
const [$] = await kumascript.render(url, {}, d);
wrapTables($);
const [sections] = await extractSections($);
const toc = makeTOC({ body: sections });
const hyData = {

@@ -291,0 +330,0 @@ id: page,

@@ -6,3 +6,2 @@ import { spawnSync } from "node:child_process";

import { cwd } from "node:process";
import * as cheerio from "cheerio";
import got from "got";

@@ -124,32 +123,2 @@ import { fileTypeFromBuffer } from "file-type";

}
export function splitSections(rawHTML) {
const $ = cheerio.load(`<div id="_body">${rawHTML}</div>`);
const blocks = [];
const toc = [];
const section = cheerio
.load("<div></div>", { decodeEntities: false })("div")
.eq(0);
const iterable = [...$("#_body")[0].childNodes];
let c = 0;
iterable.forEach((child) => {
if ("tagName" in child && child.tagName === "h2") {
if (c) {
blocks.push(section.clone());
section.empty();
c = 0;
}
const text = $(child).text();
const id = text.replace(/[ .,!?]+/g, "-").toLowerCase();
toc.push({ id, text });
child.attribs = { ...(child.attribs || {}), id };
}
c++;
section.append(child);
});
if (c) {
blocks.push(section.clone());
}
const sections = blocks.map((block) => block.html().trim());
return { sections, toc };
}
/**

@@ -156,0 +125,0 @@ * Return an array of all images that are inside the documents source folder.

@@ -151,36 +151,2 @@ import { spawnSync } from "node:child_process";

export function splitSections(rawHTML) {
const $ = cheerio.load(`<div id="_body">${rawHTML}</div>`);
const blocks = [];
const toc = [];
const section = cheerio
.load("<div></div>", { decodeEntities: false })("div")
.eq(0);
const iterable = [...($("#_body")[0] as cheerio.Element).childNodes];
let c = 0;
iterable.forEach((child) => {
if ("tagName" in child && child.tagName === "h2") {
if (c) {
blocks.push(section.clone());
section.empty();
c = 0;
}
const text = $(child).text();
const id = text.replace(/[ .,!?]+/g, "-").toLowerCase();
toc.push({ id, text });
child.attribs = { ...(child.attribs || {}), id };
}
c++;
section.append(child);
});
if (c) {
blocks.push(section.clone());
}
const sections = blocks.map((block) => block.html().trim());
return { sections, toc };
}
/**

@@ -187,0 +153,0 @@ * Return an array of all images that are inside the documents source folder.

{
"files": {
"main.css": "/static/css/main.2f3dc124.css",
"main.js": "/static/js/main.42198070.js",
"static/js/2.6f11d7af.chunk.js": "/static/js/2.6f11d7af.chunk.js",
"main.css": "/static/css/main.a961f482.css",
"main.js": "/static/js/main.ffbae354.js",
"static/js/2.83666e95.chunk.js": "/static/js/2.83666e95.chunk.js",
"static/css/5.19064a43.chunk.css": "/static/css/5.19064a43.chunk.css",
"static/js/5.29503e84.chunk.js": "/static/js/5.29503e84.chunk.js",
"static/js/5.806c09c9.chunk.js": "/static/js/5.806c09c9.chunk.js",
"static/css/7.8dbf9ebe.chunk.css": "/static/css/7.8dbf9ebe.chunk.css",
"static/js/7.4f1a0c91.chunk.js": "/static/js/7.4f1a0c91.chunk.js",
"static/js/7.82ea07d1.chunk.js": "/static/js/7.82ea07d1.chunk.js",
"static/css/9.1b353030.chunk.css": "/static/css/9.1b353030.chunk.css",
"static/js/9.00674f57.chunk.js": "/static/js/9.00674f57.chunk.js",
"static/js/9.0b849ec6.chunk.js": "/static/js/9.0b849ec6.chunk.js",
"static/css/10.1904d8f2.chunk.css": "/static/css/10.1904d8f2.chunk.css",
"static/js/10.799e9a2d.chunk.js": "/static/js/10.799e9a2d.chunk.js",
"static/js/10.d227b5e4.chunk.js": "/static/js/10.d227b5e4.chunk.js",
"static/css/11.706ddea0.chunk.css": "/static/css/11.706ddea0.chunk.css",
"static/js/11.18127906.chunk.js": "/static/js/11.18127906.chunk.js",
"static/js/11.b70e6147.chunk.js": "/static/js/11.b70e6147.chunk.js",
"static/css/15.6d2a3650.chunk.css": "/static/css/15.6d2a3650.chunk.css",
"static/js/15.646c9b60.chunk.js": "/static/js/15.646c9b60.chunk.js",
"static/js/15.f564e862.chunk.js": "/static/js/15.f564e862.chunk.js",
"static/css/6.3bbffd50.chunk.css": "/static/css/6.3bbffd50.chunk.css",
"static/js/6.910faa0d.chunk.js": "/static/js/6.910faa0d.chunk.js",
"static/js/6.c5fb07da.chunk.js": "/static/js/6.c5fb07da.chunk.js",
"static/css/18.259a2a44.chunk.css": "/static/css/18.259a2a44.chunk.css",
"static/js/18.c1660748.chunk.js": "/static/js/18.c1660748.chunk.js",
"browser-compatibility-table.js": "/static/js/browser-compatibility-table.88534b2a.chunk.js",
"static/js/19.147647aa.chunk.js": "/static/js/19.147647aa.chunk.js",
"static/js/20.40de9807.chunk.js": "/static/js/20.40de9807.chunk.js",
"static/js/18.cd1c6fb9.chunk.js": "/static/js/18.cd1c6fb9.chunk.js",
"browser-compatibility-table.js": "/static/js/browser-compatibility-table.4d7dcfc6.chunk.js",
"static/js/19.cd70c497.chunk.js": "/static/js/19.cd70c497.chunk.js",
"static/js/20.790cb4a3.chunk.js": "/static/js/20.790cb4a3.chunk.js",
"static/css/21.7612237d.chunk.css": "/static/css/21.7612237d.chunk.css",
"static/js/21.abad1a5e.chunk.js": "/static/js/21.abad1a5e.chunk.js",
"static/js/21.d44be6ea.chunk.js": "/static/js/21.d44be6ea.chunk.js",
"static/css/14.8a1f8bf9.chunk.css": "/static/css/14.8a1f8bf9.chunk.css",
"static/js/14.c57864b7.chunk.js": "/static/js/14.c57864b7.chunk.js",
"static/js/14.762e99e8.chunk.js": "/static/js/14.762e99e8.chunk.js",
"static/css/23.d58ac90e.chunk.css": "/static/css/23.d58ac90e.chunk.css",
"static/js/23.ab32febd.chunk.js": "/static/js/23.ab32febd.chunk.js",
"static/js/23.fc30194a.chunk.js": "/static/js/23.fc30194a.chunk.js",
"static/css/8.88fa5fca.chunk.css": "/static/css/8.88fa5fca.chunk.css",
"static/js/8.fb1e6b2b.chunk.js": "/static/js/8.fb1e6b2b.chunk.js",
"static/js/3.5c3d35f8.chunk.js": "/static/js/3.5c3d35f8.chunk.js",
"static/js/24.d80ef04b.chunk.js": "/static/js/24.d80ef04b.chunk.js",
"static/js/8.462174dd.chunk.js": "/static/js/8.462174dd.chunk.js",
"static/js/3.4b84e43c.chunk.js": "/static/js/3.4b84e43c.chunk.js",
"static/js/24.7e8d2624.chunk.js": "/static/js/24.7e8d2624.chunk.js",
"static/css/25.a3df29b5.chunk.css": "/static/css/25.a3df29b5.chunk.css",
"static/js/25.383ce3b0.chunk.js": "/static/js/25.383ce3b0.chunk.js",
"static/js/25.75026a50.chunk.js": "/static/js/25.75026a50.chunk.js",
"static/css/26.1b502418.chunk.css": "/static/css/26.1b502418.chunk.css",
"static/js/26.6db50ef3.chunk.js": "/static/js/26.6db50ef3.chunk.js",
"static/js/4.c2e0b2a4.chunk.js": "/static/js/4.c2e0b2a4.chunk.js",
"static/js/12.f166246e.chunk.js": "/static/js/12.f166246e.chunk.js",
"static/js/22.d35ca313.chunk.js": "/static/js/22.d35ca313.chunk.js",
"static/js/13.f36be4a1.chunk.js": "/static/js/13.f36be4a1.chunk.js",
"static/js/17.7935f5e1.chunk.js": "/static/js/17.7935f5e1.chunk.js",
"static/js/16.91e8fc34.chunk.js": "/static/js/16.91e8fc34.chunk.js",
"static/js/26.875ad838.chunk.js": "/static/js/26.875ad838.chunk.js",
"static/js/4.c579f4c2.chunk.js": "/static/js/4.c579f4c2.chunk.js",
"static/js/12.e84e3e03.chunk.js": "/static/js/12.e84e3e03.chunk.js",
"static/js/22.6b558c73.chunk.js": "/static/js/22.6b558c73.chunk.js",
"static/js/13.452b7686.chunk.js": "/static/js/13.452b7686.chunk.js",
"static/js/17.356e5122.chunk.js": "/static/js/17.356e5122.chunk.js",
"static/js/16.767f8a35.chunk.js": "/static/js/16.767f8a35.chunk.js",
"static/media/STIXTwoMath-Regular.woff2": "/static/media/STIXTwoMath-Regular.a6dd783b1df04c61b10a.woff2",

@@ -213,49 +213,49 @@ "static/media/ai-help_dark.png": "/static/media/ai-help_dark.c6ded5f61535da7aff21.png",

"static/media/small-arrow.svg": "/static/media/small-arrow.a22801b3d18b7d1ea795.svg",
"main.2f3dc124.css.map": "/static/css/main.2f3dc124.css.map",
"main.42198070.js.map": "/static/js/main.42198070.js.map",
"2.6f11d7af.chunk.js.map": "/static/js/2.6f11d7af.chunk.js.map",
"main.a961f482.css.map": "/static/css/main.a961f482.css.map",
"main.ffbae354.js.map": "/static/js/main.ffbae354.js.map",
"2.83666e95.chunk.js.map": "/static/js/2.83666e95.chunk.js.map",
"5.19064a43.chunk.css.map": "/static/css/5.19064a43.chunk.css.map",
"5.29503e84.chunk.js.map": "/static/js/5.29503e84.chunk.js.map",
"5.806c09c9.chunk.js.map": "/static/js/5.806c09c9.chunk.js.map",
"7.8dbf9ebe.chunk.css.map": "/static/css/7.8dbf9ebe.chunk.css.map",
"7.4f1a0c91.chunk.js.map": "/static/js/7.4f1a0c91.chunk.js.map",
"7.82ea07d1.chunk.js.map": "/static/js/7.82ea07d1.chunk.js.map",
"9.1b353030.chunk.css.map": "/static/css/9.1b353030.chunk.css.map",
"9.00674f57.chunk.js.map": "/static/js/9.00674f57.chunk.js.map",
"9.0b849ec6.chunk.js.map": "/static/js/9.0b849ec6.chunk.js.map",
"10.1904d8f2.chunk.css.map": "/static/css/10.1904d8f2.chunk.css.map",
"10.799e9a2d.chunk.js.map": "/static/js/10.799e9a2d.chunk.js.map",
"10.d227b5e4.chunk.js.map": "/static/js/10.d227b5e4.chunk.js.map",
"11.706ddea0.chunk.css.map": "/static/css/11.706ddea0.chunk.css.map",
"11.18127906.chunk.js.map": "/static/js/11.18127906.chunk.js.map",
"11.b70e6147.chunk.js.map": "/static/js/11.b70e6147.chunk.js.map",
"15.6d2a3650.chunk.css.map": "/static/css/15.6d2a3650.chunk.css.map",
"15.646c9b60.chunk.js.map": "/static/js/15.646c9b60.chunk.js.map",
"15.f564e862.chunk.js.map": "/static/js/15.f564e862.chunk.js.map",
"6.3bbffd50.chunk.css.map": "/static/css/6.3bbffd50.chunk.css.map",
"6.910faa0d.chunk.js.map": "/static/js/6.910faa0d.chunk.js.map",
"6.c5fb07da.chunk.js.map": "/static/js/6.c5fb07da.chunk.js.map",
"18.259a2a44.chunk.css.map": "/static/css/18.259a2a44.chunk.css.map",
"18.c1660748.chunk.js.map": "/static/js/18.c1660748.chunk.js.map",
"browser-compatibility-table.88534b2a.chunk.js.map": "/static/js/browser-compatibility-table.88534b2a.chunk.js.map",
"19.147647aa.chunk.js.map": "/static/js/19.147647aa.chunk.js.map",
"20.40de9807.chunk.js.map": "/static/js/20.40de9807.chunk.js.map",
"18.cd1c6fb9.chunk.js.map": "/static/js/18.cd1c6fb9.chunk.js.map",
"browser-compatibility-table.4d7dcfc6.chunk.js.map": "/static/js/browser-compatibility-table.4d7dcfc6.chunk.js.map",
"19.cd70c497.chunk.js.map": "/static/js/19.cd70c497.chunk.js.map",
"20.790cb4a3.chunk.js.map": "/static/js/20.790cb4a3.chunk.js.map",
"21.7612237d.chunk.css.map": "/static/css/21.7612237d.chunk.css.map",
"21.abad1a5e.chunk.js.map": "/static/js/21.abad1a5e.chunk.js.map",
"21.d44be6ea.chunk.js.map": "/static/js/21.d44be6ea.chunk.js.map",
"14.8a1f8bf9.chunk.css.map": "/static/css/14.8a1f8bf9.chunk.css.map",
"14.c57864b7.chunk.js.map": "/static/js/14.c57864b7.chunk.js.map",
"14.762e99e8.chunk.js.map": "/static/js/14.762e99e8.chunk.js.map",
"23.d58ac90e.chunk.css.map": "/static/css/23.d58ac90e.chunk.css.map",
"23.ab32febd.chunk.js.map": "/static/js/23.ab32febd.chunk.js.map",
"23.fc30194a.chunk.js.map": "/static/js/23.fc30194a.chunk.js.map",
"8.88fa5fca.chunk.css.map": "/static/css/8.88fa5fca.chunk.css.map",
"8.fb1e6b2b.chunk.js.map": "/static/js/8.fb1e6b2b.chunk.js.map",
"3.5c3d35f8.chunk.js.map": "/static/js/3.5c3d35f8.chunk.js.map",
"24.d80ef04b.chunk.js.map": "/static/js/24.d80ef04b.chunk.js.map",
"8.462174dd.chunk.js.map": "/static/js/8.462174dd.chunk.js.map",
"3.4b84e43c.chunk.js.map": "/static/js/3.4b84e43c.chunk.js.map",
"24.7e8d2624.chunk.js.map": "/static/js/24.7e8d2624.chunk.js.map",
"25.a3df29b5.chunk.css.map": "/static/css/25.a3df29b5.chunk.css.map",
"25.383ce3b0.chunk.js.map": "/static/js/25.383ce3b0.chunk.js.map",
"25.75026a50.chunk.js.map": "/static/js/25.75026a50.chunk.js.map",
"26.1b502418.chunk.css.map": "/static/css/26.1b502418.chunk.css.map",
"26.6db50ef3.chunk.js.map": "/static/js/26.6db50ef3.chunk.js.map",
"4.c2e0b2a4.chunk.js.map": "/static/js/4.c2e0b2a4.chunk.js.map",
"12.f166246e.chunk.js.map": "/static/js/12.f166246e.chunk.js.map",
"22.d35ca313.chunk.js.map": "/static/js/22.d35ca313.chunk.js.map",
"13.f36be4a1.chunk.js.map": "/static/js/13.f36be4a1.chunk.js.map",
"17.7935f5e1.chunk.js.map": "/static/js/17.7935f5e1.chunk.js.map",
"16.91e8fc34.chunk.js.map": "/static/js/16.91e8fc34.chunk.js.map"
"26.875ad838.chunk.js.map": "/static/js/26.875ad838.chunk.js.map",
"4.c579f4c2.chunk.js.map": "/static/js/4.c579f4c2.chunk.js.map",
"12.e84e3e03.chunk.js.map": "/static/js/12.e84e3e03.chunk.js.map",
"22.6b558c73.chunk.js.map": "/static/js/22.6b558c73.chunk.js.map",
"13.452b7686.chunk.js.map": "/static/js/13.452b7686.chunk.js.map",
"17.356e5122.chunk.js.map": "/static/js/17.356e5122.chunk.js.map",
"16.767f8a35.chunk.js.map": "/static/js/16.767f8a35.chunk.js.map"
},
"entrypoints": [
"static/css/main.2f3dc124.css",
"static/js/main.42198070.js"
"static/css/main.a961f482.css",
"static/js/main.ffbae354.js"
]
}

@@ -1,1 +0,1 @@

{"hyData":{"recentContributions":{"items":[{"number":34427,"title":"Add visual viewport scrollend event ref page","updated_at":"2024-08-28T08:33:32Z","url":"https://github.com/mdn/content/pull/34427","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":23069,"title":"[zh-tw] update filesystem ","updated_at":"2024-08-28T08:12:24Z","url":"https://github.com/mdn/translated-content/pull/23069","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23079,"title":"[zh-cn]: create docs for HTMLTimeElement","updated_at":"2024-08-28T08:10:46Z","url":"https://github.com/mdn/translated-content/pull/23079","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":35611,"title":"Content fixes","updated_at":"2024-08-28T03:12:31Z","url":"https://github.com/mdn/content/pull/35611","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":35608,"title":"Use images from shared-assets","updated_at":"2024-08-28T01:14:54Z","url":"https://github.com/mdn/content/pull/35608","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":23213,"title":"[es] Web/JavaScript/Reference/Global_Objects/Map/has","updated_at":"2024-08-28T00:01:56Z","url":"https://github.com/mdn/translated-content/pull/23213","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23214,"title":"[es] Web/JavaScript/Reference/Global_Objects/Map/set","updated_at":"2024-08-28T00:01:46Z","url":"https://github.com/mdn/translated-content/pull/23214","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23215,"title":"[es] Web/JavaScript/Reference/Global_Objects/Map/size","updated_at":"2024-08-28T00:01:40Z","url":"https://github.com/mdn/translated-content/pull/23215","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":35598,"title":"Mention browser APIs in Iterator","updated_at":"2024-08-27T17:00:16Z","url":"https://github.com/mdn/content/pull/35598","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":35202,"title":"New docs area for URL semantics, relocate some HTTP pages here","updated_at":"2024-08-27T14:41:07Z","url":"https://github.com/mdn/content/pull/35202","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}}]},"featuredContributor":null,"latestNews":{"items":[]},"featuredArticles":[]},"url":"/en-US/"}
{"hyData":{"recentContributions":{"items":[{"number":35662,"title":"Add page for HTMLDataListElement.options","updated_at":"2024-09-10T15:37:35Z","url":"https://github.com/mdn/content/pull/35662","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":35789,"title":"add the missing section tags in the main html code example","updated_at":"2024-09-10T15:36:30Z","url":"https://github.com/mdn/content/pull/35789","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":35815,"title":"<input> page title","updated_at":"2024-09-10T15:32:10Z","url":"https://github.com/mdn/content/pull/35815","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":23501,"title":"[ja]: fix typo","updated_at":"2024-09-10T14:44:28Z","url":"https://github.com/mdn/translated-content/pull/23501","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23433,"title":"Web/API/PointerEvent/pointerId を更新","updated_at":"2024-09-10T14:35:43Z","url":"https://github.com/mdn/translated-content/pull/23433","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23432,"title":"Web/API/PointerEvent/persistentDeviceId を新規翻訳","updated_at":"2024-09-10T14:35:41Z","url":"https://github.com/mdn/translated-content/pull/23432","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23434,"title":"Web/API/PointerEvent/pointerType 他5件を更新","updated_at":"2024-09-10T14:35:37Z","url":"https://github.com/mdn/translated-content/pull/23434","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":23435,"title":"Web/API/PointerEvent/width を更新","updated_at":"2024-09-10T14:35:30Z","url":"https://github.com/mdn/translated-content/pull/23435","repo":{"name":"mdn/translated-content","url":"https://github.com/mdn/translated-content"}},{"number":35806,"title":"fix(ci/spellcheck): create a new issue every week","updated_at":"2024-09-10T12:20:47Z","url":"https://github.com/mdn/content/pull/35806","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}},{"number":35613,"title":"fix: replace rgba() with rgb() in code blocks","updated_at":"2024-09-10T12:17:19Z","url":"https://github.com/mdn/content/pull/35613","repo":{"name":"mdn/content","url":"https://github.com/mdn/content"}}]},"featuredContributor":null,"latestNews":{"items":[]},"featuredArticles":[]},"url":"/en-US/"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"faq","title":"FAQ","sections":["<h1>Frequently asked questions</h1>","<h2 id=\"should-i-implement-all-recommendations-\">Should I implement all recommendations?</h2>\n<p>\n Yes, you should do it if possible. There is no way to programmatically determine\n the risk level of any given site. However, while your site may not be high-risk,\n it is still worth learning about the defensive security standards highlighted by\n Observatory, and implementing them wherever you can.\n</p>","<h2 id=\"if-i-get-an-a+-grade-does-that-mean-my-site-is-secure-\">If I get an A+ grade, does that mean my site is secure?</h2>\n<p>\n We'd love to say that any site that gets an A+ Observatory grade is perfectly\n secure, but there are a lot of security considerations that we can't test.\n Observatory tests for preventative measures against\n <a href=\"/en-US/docs/Glossary/Cross-site_scripting\">Cross-site scripting (XSS)</a> attacks,\n <a href=\"/en-US/docs/Glossary/MitM\">manipulator-in-the-middle (MiTM)</a> attacks,\n cross-domain information leakage, insecure\n <a href=\"/en-US/docs/Web/HTTP/Cookies\">cookies</a>,\n <a href=\"/en-US/docs/Glossary/CDN\">Content Delivery Network</a> (CDN) compromises, and\n improperly issued certificates.\n</p>\n<p>\n However, it does not test for outdated software versions,\n <a href=\"/en-US/docs/Glossary/SQL_Injection\">SQL injection</a> vulnerabilities, vulnerable\n content management system plugins, improper creation or storage of passwords,\n and more. These are just as important as the issues Observatory <em>does</em> test for,\n and site operators should not be neglectful of them simply because they score\n well on Observatory.\n</p>","<h2 id=\"can-i-scan-non-websites-such-as-api-endpoints-\">Can I scan non-websites, such as API endpoints?</h2>\n<p>\n The HTTP Observatory is designed for scanning websites, not API endpoints. It\n can be used for API endpoints, and the security headers expected by Observatory\n shouldn't cause any negative impact for APIs that return exclusively data, such\n as JSON or XML. However, the results may not accurately reflect the security\n posture of the API. API endpoints generally should only be accessible over\n HTTPS. The recommended configuration for API endpoints is:\n</p>\n<pre class=\"brush: http\">Content-Security-Policy: default-src 'none'; frame-ancestors 'none'\nStrict-Transport-Security: max-age=63072000\nX-Content-Type-Options: nosniff\n</pre>","<h2 id=\"can-other-people-see-my-test-results-\">Can other people see my test results?</h2>\n<p>\n Anyone can choose to scan any domain, and the scan history for each domain is\n public. However, HTTP Observatory does not store user data related to each scan.\n In the old version of HTTP Observatory, users could choose to set their scan to\n \"public\" or keep it private (the default), and there was a \"recent scans\" list\n where domain names were listed. \"Recent scans\" was the main feature that users\n would potentially wish to opt-out from, but it is no longer supported, hence\n there is now no reason to provide the \"public\" flag.\n</p>","<h2 id=\"when-did-the-move-occur-\">When did the move occur?</h2>\n<p>\n The new HTTP Observatory was launched on MDN on July 2, 2024. The\n <a href=\"https://observatory.mozilla.org/\">old Mozilla Observatory</a> — containing HTTP\n Observatory plus other tools like TLS Observatory, SSH Observatory, and\n Third-party tests — has been deprecated and will be sunset in September 2024.\n</p>\n<div class=\"notecard note\">\n <p>\n <strong>Note:</strong> Historic scan data has been preserved, and is included in the\n provided scan history for each domain.\n </p>\n</div>","<h2 id=\"what-has-changed-after-the-migration-\">What has changed after the migration?</h2>\n<p>The MDN team has:</p>\n<ul>\n <li>\n Updated the user experience to improve the site's look and make it easier to\n use. For example, the recommendations highlighted by the test results are all\n shown together, instead of one at a time.\n </li>\n <li>\n Updated the\n <a href=\"/en-US/docs/Web/Security/Practical_implementation_guides#content_security_fundamentals\">accompanying documentation</a>\n to bring it up to date and improve legibility.\n </li>\n <li>Changed the \"rescan\" checkbox and its underlying mechanics:\n <ul>\n <li>There is no longer a rescan parameter.</li>\n <li>A site can only be scanned and a new result returned every 60 seconds.</li>\n <li>\n Deep-linking into a report initiates a rescan if the previous scan data is\n older than 24 hours.\n </li>\n </ul>\n </li>\n <li>\n Updated the\n <a href=\"/en-US/observatory/docs/tests_and_scoring#tests-and-score-modifiers\">tests</a>\n to bring them up-to-date with latest security best practices:\n <ul>\n <li>Removed the out-of-date <code>X-XSS-Protection</code> test.</li>\n <li>\n Removed the out-of-date Flash and Silverlight (<code>clientaccesspolicy.xml</code> and\n <code>crossdomain.xml</code>) embedding tests.\n </li>\n <li>\n Added a\n <a href=\"/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy\"><code>Cross-Origin-Resource-Policy</code></a>\n (CORP) test.\n </li>\n <li>\n Updated the\n <a href=\"/en-US/docs/Web/HTTP/Headers/Referrer-Policy\"><code>Referrer-Policy</code></a> test to\n update the score modifier for <code>referrer-policy-unsafe</code> and remove the\n <code>referrer-policy-no-referrer-when-downgrade</code> result.\n </li>\n </ul>\n </li>\n</ul>","<h2 id=\"has-the-http-observatory-api-been-updated-to-use-the-new-tests-\">Has the HTTP Observatory API been updated to use the new tests?</h2>\n<p>\n Not yet. The API will continue using the old test infrastructure for a while,\n therefore you will see some small differences between test scores returned by\n the API and the website. The API will be updated to use the new tests in a\n near-future iteration.\n</p>","<h2 id=\"does-the-new-http-observatory-provide-specific-tls-and-certificate-data-\">Does the new HTTP Observatory provide specific TLS and certificate data?</h2>\n<p>\n The previous Observatory site included specific results tabs containing TLS and\n certificate analysis data. The new one does not, and there are currently no\n plans to include these features: it provides a clear focus on HTTP data.\n</p>","<h2 id=\"(redirection)-what-is-the-http-redirection-test-assessing-\">(Redirection) What is the HTTP redirection test assessing?</h2>\n<p>\n This test is checking whether your web server is making its\n <a href=\"/en-US/docs/Web/Security/Practical_implementation_guides/TLS#http_redirection\">initial redirection from HTTP to HTTPS</a>,\n on the same hostname, before doing any further redirections. This allows the\n HTTP\n <a href=\"/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security\"><code>Strict-Transport-Security</code></a>\n (HSTS) header to be applied properly.\n</p>\n<p>For example, this redirection order is correct:</p>\n<p><code>http://example.com</code> → <code>https://example.com</code> → <code>https://www.example.com</code></p>\n<p>An incorrect (and penalized) redirection looks like this:</p>\n<p><code>http://example.com</code> → <code>https://www.example.com</code></p>","<h2 id=\"(x-frame-options)-what-if-i-want-to-allow-my-site-to-be-framed-\">(X-Frame-Options) What if I want to allow my site to be framed?</h2>\n<p>\n As long as you are explicit about your preference by using the\n <a href=\"/en-US/docs/Web/HTTP/Headers/Content-Security-Policy\"><code>Content-Security-Policy</code></a>\n <a href=\"/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors\"><code>frame-ancestors</code></a>\n directive, you will pass the\n <a href=\"/en-US/docs/Web/HTTP/Headers/X-Frame-Options\"><code>X-Frame-Options</code></a> test. For\n example, to allow your site to be framed by any HTTPS site:\n</p>\n<pre class=\"brush: http\">Content-Security-Policy: frame-ancestors https:\n</pre>"],"toc":[{"id":"should-i-implement-all-recommendations-","text":"Should I implement all recommendations?"},{"id":"if-i-get-an-a+-grade-does-that-mean-my-site-is-secure-","text":"If I get an A+ grade, does that mean my site is secure?"},{"id":"can-i-scan-non-websites-such-as-api-endpoints-","text":"Can I scan non-websites, such as API endpoints?"},{"id":"can-other-people-see-my-test-results-","text":"Can other people see my test results?"},{"id":"when-did-the-move-occur-","text":"When did the move occur?"},{"id":"what-has-changed-after-the-migration-","text":"What has changed after the migration?"},{"id":"has-the-http-observatory-api-been-updated-to-use-the-new-tests-","text":"Has the HTTP Observatory API been updated to use the new tests?"},{"id":"does-the-new-http-observatory-provide-specific-tls-and-certificate-data-","text":"Does the new HTTP Observatory provide specific TLS and certificate data?"},{"id":"(redirection)-what-is-the-http-redirection-test-assessing-","text":"(Redirection) What is the HTTP redirection test assessing?"},{"id":"(x-frame-options)-what-if-i-want-to-allow-my-site-to-be-framed-","text":"(X-Frame-Options) What if I want to allow my site to be framed?"}]},"pageTitle":"FAQ | HTTP Observatory","url":"/en-US/observatory/docs/faq"}
{"hyData":{"id":"faq","title":"FAQ","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"frequently_asked_questions\">Frequently asked questions</h1>"}},{"type":"prose","value":{"id":"should_i_implement_all_recommendations","title":"Should I implement all recommendations?","isH3":false,"content":"<p>\n Yes, you should do it if possible. There is no way to programmatically determine\n the risk level of any given site. However, while your site may not be high-risk,\n it is still worth learning about the defensive security standards highlighted by\n Observatory, and implementing them wherever you can.\n</p>"}},{"type":"prose","value":{"id":"if_i_get_an_a_grade_does_that_mean_my_site_is_secure","title":"If I get an A+ grade, does that mean my site is secure?","isH3":false,"content":"<p>\n We'd love to say that any site that gets an A+ Observatory grade is perfectly\n secure, but there are a lot of security considerations that we can't test.\n Observatory tests for preventative measures against\n <a href=\"/en-US/docs/Glossary/Cross-site_scripting\">Cross-site scripting (XSS)</a> attacks,\n <a href=\"/en-US/docs/Glossary/MitM\">manipulator-in-the-middle (MiTM)</a> attacks,\n cross-domain information leakage, insecure\n <a href=\"/en-US/docs/Web/HTTP/Cookies\">cookies</a>,\n <a href=\"/en-US/docs/Glossary/CDN\">Content Delivery Network</a> (CDN) compromises, and\n improperly issued certificates.\n</p>\n<p>\n However, it does not test for outdated software versions,\n <a href=\"/en-US/docs/Glossary/SQL_Injection\">SQL injection</a> vulnerabilities, vulnerable\n content management system plugins, improper creation or storage of passwords,\n and more. These are just as important as the issues Observatory <em>does</em> test for,\n and site operators should not be neglectful of them simply because they score\n well on Observatory.\n</p>"}},{"type":"prose","value":{"id":"can_i_scan_non-websites_such_as_api_endpoints","title":"Can I scan non-websites, such as API endpoints?","isH3":false,"content":"<p>\n The HTTP Observatory is designed for scanning websites, not API endpoints. It\n can be used for API endpoints, and the security headers expected by Observatory\n shouldn't cause any negative impact for APIs that return exclusively data, such\n as JSON or XML. However, the results may not accurately reflect the security\n posture of the API. API endpoints generally should only be accessible over\n HTTPS. The recommended configuration for API endpoints is:\n</p>\n<pre class=\"brush: http\">Content-Security-Policy: default-src 'none'; frame-ancestors 'none'\nStrict-Transport-Security: max-age=63072000\nX-Content-Type-Options: nosniff\n</pre>"}},{"type":"prose","value":{"id":"can_other_people_see_my_test_results","title":"Can other people see my test results?","isH3":false,"content":"<p>\n Anyone can choose to scan any domain, and the scan history for each domain is\n public. However, HTTP Observatory does not store user data related to each scan.\n In the old version of HTTP Observatory, users could choose to set their scan to\n \"public\" or keep it private (the default), and there was a \"recent scans\" list\n where domain names were listed. \"Recent scans\" was the main feature that users\n would potentially wish to opt-out from, but it is no longer supported, hence\n there is now no reason to provide the \"public\" flag.\n</p>"}},{"type":"prose","value":{"id":"when_did_the_move_occur","title":"When did the move occur?","isH3":false,"content":"<p>\n The new HTTP Observatory was launched on MDN on July 2, 2024. The\n <a href=\"https://observatory.mozilla.org/\">old Mozilla Observatory</a> — containing HTTP\n Observatory plus other tools like TLS Observatory, SSH Observatory, and\n Third-party tests — has been deprecated and will be sunset in September 2024.\n</p>\n<div class=\"notecard note\" id=\"sect1\">\n <p>\n <strong>Note:</strong> Historic scan data has been preserved, and is included in the\n provided scan history for each domain.\n </p>\n</div>"}},{"type":"prose","value":{"id":"what_has_changed_after_the_migration","title":"What has changed after the migration?","isH3":false,"content":"<p>The MDN team has:</p>\n<ul>\n <li>\n Updated the user experience to improve the site's look and make it easier to\n use. For example, the recommendations highlighted by the test results are all\n shown together, instead of one at a time.\n </li>\n <li>\n Updated the\n <a href=\"/en-US/docs/Web/Security/Practical_implementation_guides#content_security_fundamentals\">accompanying documentation</a>\n to bring it up to date and improve legibility.\n </li>\n <li>Changed the \"rescan\" checkbox and its underlying mechanics:\n <ul>\n <li>There is no longer a rescan parameter.</li>\n <li>A site can only be scanned and a new result returned every 60 seconds.</li>\n <li>\n Deep-linking into a report initiates a rescan if the previous scan data is\n older than 24 hours.\n </li>\n </ul>\n </li>\n <li>\n Updated the\n <a href=\"/en-US/observatory/docs/tests_and_scoring#tests-and-score-modifiers\">tests</a>\n to bring them up-to-date with latest security best practices:\n <ul>\n <li>Removed the out-of-date <code>X-XSS-Protection</code> test.</li>\n <li>\n Removed the out-of-date Flash and Silverlight (<code>clientaccesspolicy.xml</code> and\n <code>crossdomain.xml</code>) embedding tests.\n </li>\n <li>\n Added a\n <a href=\"/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy\"><code>Cross-Origin-Resource-Policy</code></a>\n (CORP) test.\n </li>\n <li>\n Updated the\n <a href=\"/en-US/docs/Web/HTTP/Headers/Referrer-Policy\"><code>Referrer-Policy</code></a> test to\n update the score modifier for <code>referrer-policy-unsafe</code> and remove the\n <code>referrer-policy-no-referrer-when-downgrade</code> result.\n </li>\n </ul>\n </li>\n</ul>"}},{"type":"prose","value":{"id":"has_the_http_observatory_api_been_updated_to_use_the_new_tests","title":"Has the HTTP Observatory API been updated to use the new tests?","isH3":false,"content":"<p>\n Not yet. The API will continue using the old test infrastructure for a while,\n therefore you will see some small differences between test scores returned by\n the API and the website. The API will be updated to use the new tests in a\n near-future iteration.\n</p>"}},{"type":"prose","value":{"id":"does_the_new_http_observatory_provide_specific_tls_and_certificate_data","title":"Does the new HTTP Observatory provide specific TLS and certificate data?","isH3":false,"content":"<p>\n The previous Observatory site included specific results tabs containing TLS and\n certificate analysis data. The new one does not, and there are currently no\n plans to include these features: it provides a clear focus on HTTP data.\n</p>"}},{"type":"prose","value":{"id":"redirection_what_is_the_http_redirection_test_assessing","title":"(Redirection) What is the HTTP redirection test assessing?","isH3":false,"content":"<p>\n This test is checking whether your web server is making its\n <a href=\"/en-US/docs/Web/Security/Practical_implementation_guides/TLS#http_redirection\">initial redirection from HTTP to HTTPS</a>,\n on the same hostname, before doing any further redirections. This allows the\n HTTP\n <a href=\"/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security\"><code>Strict-Transport-Security</code></a>\n (HSTS) header to be applied properly.\n</p>\n<p>For example, this redirection order is correct:</p>\n<p><code>http://example.com</code> → <code>https://example.com</code> → <code>https://www.example.com</code></p>\n<p>An incorrect (and penalized) redirection looks like this:</p>\n<p><code>http://example.com</code> → <code>https://www.example.com</code></p>"}},{"type":"prose","value":{"id":"x-frame-options_what_if_i_want_to_allow_my_site_to_be_framed","title":"(X-Frame-Options) What if I want to allow my site to be framed?","isH3":false,"content":"<p>\n As long as you are explicit about your preference by using the\n <a href=\"/en-US/docs/Web/HTTP/Headers/Content-Security-Policy\"><code>Content-Security-Policy</code></a>\n <a href=\"/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors\"><code>frame-ancestors</code></a>\n directive, you will pass the\n <a href=\"/en-US/docs/Web/HTTP/Headers/X-Frame-Options\"><code>X-Frame-Options</code></a> test. For\n example, to allow your site to be framed by any HTTPS site:\n</p>\n<pre class=\"brush: http\">Content-Security-Policy: frame-ancestors https:\n</pre>"}}],"toc":[{"text":"Should I implement all recommendations?","id":"should_i_implement_all_recommendations"},{"text":"If I get an A+ grade, does that mean my site is secure?","id":"if_i_get_an_a_grade_does_that_mean_my_site_is_secure"},{"text":"Can I scan non-websites, such as API endpoints?","id":"can_i_scan_non-websites_such_as_api_endpoints"},{"text":"Can other people see my test results?","id":"can_other_people_see_my_test_results"},{"text":"When did the move occur?","id":"when_did_the_move_occur"},{"text":"What has changed after the migration?","id":"what_has_changed_after_the_migration"},{"text":"Has the HTTP Observatory API been updated to use the new tests?","id":"has_the_http_observatory_api_been_updated_to_use_the_new_tests"},{"text":"Does the new HTTP Observatory provide specific TLS and certificate data?","id":"does_the_new_http_observatory_provide_specific_tls_and_certificate_data"},{"text":"(Redirection) What is the HTTP redirection test assessing?","id":"redirection_what_is_the_http_redirection_test_assessing"},{"text":"(X-Frame-Options) What if I want to allow my site to be framed?","id":"x-frame-options_what_if_i_want_to_allow_my_site_to_be_framed"}]},"pageTitle":"FAQ | HTTP Observatory","url":"/en-US/observatory/docs/faq"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"tests_and_scoring","title":"Tests & Scoring","sections":["<h1>HTTP Observatory Scoring Methodology</h1>\n<p>\n It is difficult to assign an objective value to a subjective question such as\n \"How bad is not implementing HTTP Strict Transport Security?\" In addition, what\n may be unnecessary for one site — such as implementing Content Security Policy —\n might mitigate important risks for another. The scores and grades offered by the\n Mozilla Observatory are designed to alert developers when they're not taking\n advantage of the latest web security features. Individual developers will need\n to determine which ones are appropriate for their sites.\n</p>\n<p>\n This page outlines the scoring methodology and grading system Observatory uses,\n before listing all of the specific tests along with their score modifiers.\n</p>","<h2 id=\"scoring-methodology\">Scoring Methodology</h2>\n<p>\n All websites start with a baseline score of 100, which is then modified with\n penalties and/or bonuses resulting from the tests. The scoring is done across\n two rounds:\n</p>\n<ol>\n <li>The baseline score has the penalty points deducted from it.</li>\n <li>\n If the resulting score is 90 (A) or greater, the bonuses are then added to\n it. You can think of the bonuses as extra credit for going above and beyond\n the call of duty in defending your website.\n </li>\n</ol>\n<p>\n Each site tested by Observatory is awarded a grade based on its final score\n after the two rounds. The minimum score is 0, and the highest possible score in\n the HTTP Observatory is currently 145.\n</p>","<h2 id=\"grading-chart\">Grading Chart</h2>\n<table>\n <thead>\n <tr>\n <th align=\"center\">Scoring Range</th>\n <th align=\"center\">Grade</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td align=\"center\">100+</td>\n <td align=\"center\">&nbsp;A+</td>\n </tr>\n <tr>\n <td align=\"center\">90-99</td>\n <td align=\"center\">&nbsp;A&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">85-89</td>\n <td align=\"center\">&nbsp;A-</td>\n </tr>\n <tr>\n <td align=\"center\">80-84</td>\n <td align=\"center\">&nbsp;B+</td>\n </tr>\n <tr>\n <td align=\"center\">70-79</td>\n <td align=\"center\">&nbsp;B&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">65-69</td>\n <td align=\"center\">&nbsp;B-</td>\n </tr>\n <tr>\n <td align=\"center\">60-64</td>\n <td align=\"center\">&nbsp;C+</td>\n </tr>\n <tr>\n <td align=\"center\">50-59</td>\n <td align=\"center\">&nbsp;C&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">45-49</td>\n <td align=\"center\">&nbsp;C-</td>\n </tr>\n <tr>\n <td align=\"center\">40-44</td>\n <td align=\"center\">&nbsp;D+</td>\n </tr>\n <tr>\n <td align=\"center\">30-39</td>\n <td align=\"center\">&nbsp;D&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">25-29</td>\n <td align=\"center\">&nbsp;D-</td>\n </tr>\n <tr>\n <td align=\"center\">0-24</td>\n <td align=\"center\">&nbsp;F&nbsp;</td>\n </tr>\n </tbody>\n</table>\n<p>\n The letter grade ranges and modifiers are essentially arbitrary, however, they\n are based on feedback from industry professionals on how important passing or\n failing a given test is likely to be.\n</p>","<h2 id=\"tests-and-score-modifiers\">Tests and Score Modifiers</h2>\n<div class=\"notecard note\">\n <p>\n <strong>Note:</strong> Over time, the modifiers may change as baselines shift or new\n cutting-edge defensive security technologies are created. The bonuses\n (positive modifiers) are specifically designed to encourage people to adopt\n new security technologies or tackle difficult implementation challenges.\n </p>\n</div>"],"toc":[{"id":"scoring-methodology","text":"Scoring Methodology"},{"id":"grading-chart","text":"Grading Chart"},{"id":"tests-and-score-modifiers","text":"Tests and Score Modifiers"}]},"pageTitle":"Tests & Scoring | HTTP Observatory","url":"/en-US/observatory/docs/tests_and_scoring"}
{"hyData":{"id":"tests_and_scoring","title":"Tests & Scoring","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"http_observatory_scoring_methodology\">HTTP Observatory Scoring Methodology</h1>\n<p>\n It is difficult to assign an objective value to a subjective question such as\n \"How bad is not implementing HTTP Strict Transport Security?\" In addition, what\n may be unnecessary for one site — such as implementing Content Security Policy —\n might mitigate important risks for another. The scores and grades offered by the\n Mozilla Observatory are designed to alert developers when they're not taking\n advantage of the latest web security features. Individual developers will need\n to determine which ones are appropriate for their sites.\n</p>\n<p>\n This page outlines the scoring methodology and grading system Observatory uses,\n before listing all of the specific tests along with their score modifiers.\n</p>"}},{"type":"prose","value":{"id":"scoring_methodology","title":"Scoring Methodology","isH3":false,"content":"<p>\n All websites start with a baseline score of 100, which is then modified with\n penalties and/or bonuses resulting from the tests. The scoring is done across\n two rounds:\n</p>\n<ol>\n <li>The baseline score has the penalty points deducted from it.</li>\n <li>\n If the resulting score is 90 (A) or greater, the bonuses are then added to\n it. You can think of the bonuses as extra credit for going above and beyond\n the call of duty in defending your website.\n </li>\n</ol>\n<p>\n Each site tested by Observatory is awarded a grade based on its final score\n after the two rounds. The minimum score is 0, and the highest possible score in\n the HTTP Observatory is currently 145.\n</p>"}},{"type":"prose","value":{"id":"grading_chart","title":"Grading Chart","isH3":false,"content":"<figure class=\"table-container\"><table>\n <thead>\n <tr>\n <th align=\"center\">Scoring Range</th>\n <th align=\"center\">Grade</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td align=\"center\">100+</td>\n <td align=\"center\">&nbsp;A+</td>\n </tr>\n <tr>\n <td align=\"center\">90-99</td>\n <td align=\"center\">&nbsp;A&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">85-89</td>\n <td align=\"center\">&nbsp;A-</td>\n </tr>\n <tr>\n <td align=\"center\">80-84</td>\n <td align=\"center\">&nbsp;B+</td>\n </tr>\n <tr>\n <td align=\"center\">70-79</td>\n <td align=\"center\">&nbsp;B&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">65-69</td>\n <td align=\"center\">&nbsp;B-</td>\n </tr>\n <tr>\n <td align=\"center\">60-64</td>\n <td align=\"center\">&nbsp;C+</td>\n </tr>\n <tr>\n <td align=\"center\">50-59</td>\n <td align=\"center\">&nbsp;C&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">45-49</td>\n <td align=\"center\">&nbsp;C-</td>\n </tr>\n <tr>\n <td align=\"center\">40-44</td>\n <td align=\"center\">&nbsp;D+</td>\n </tr>\n <tr>\n <td align=\"center\">30-39</td>\n <td align=\"center\">&nbsp;D&nbsp;</td>\n </tr>\n <tr>\n <td align=\"center\">25-29</td>\n <td align=\"center\">&nbsp;D-</td>\n </tr>\n <tr>\n <td align=\"center\">0-24</td>\n <td align=\"center\">&nbsp;F&nbsp;</td>\n </tr>\n </tbody>\n</table></figure>\n<p>\n The letter grade ranges and modifiers are essentially arbitrary, however, they\n are based on feedback from industry professionals on how important passing or\n failing a given test is likely to be.\n</p>"}},{"type":"prose","value":{"id":"tests_and_score_modifiers","title":"Tests and Score Modifiers","isH3":false,"content":"<div class=\"notecard note\" id=\"sect1\">\n <p>\n <strong>Note:</strong> Over time, the modifiers may change as baselines shift or new\n cutting-edge defensive security technologies are created. The bonuses\n (positive modifiers) are specifically designed to encourage people to adopt\n new security technologies or tackle difficult implementation challenges.\n </p>\n</div>"}}],"toc":[{"text":"Scoring Methodology","id":"scoring_methodology"},{"text":"Grading Chart","id":"grading_chart"},{"text":"Tests and Score Modifiers","id":"tests_and_score_modifiers"}]},"pageTitle":"Tests & Scoring | HTTP Observatory","url":"/en-US/observatory/docs/tests_and_scoring"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"faq","title":"FAQ","sections":["<h1>Frequently asked questions</h1>","<h2 id=\"what-is-mdn-plus-\">What is MDN Plus?</h2>\n<p>\n MDN Plus is a premium subscription service launched in March 2022 by Mozilla.\n The service allows users to customize their MDN Web Docs experience through\n premium features such as <a href=\"/en-US/plus/docs/features/updates\">Updates</a>,\n <a href=\"/en-US/plus/docs/features/collections\">Collections</a> and\n <a href=\"/en-US/plus/docs/features/offline\">MDN Offline</a>.\n</p>","<h2 id=\"why-are-we-working-on-premium-features-on-mdn-\">Why are we working on premium features on MDN?</h2>\n<p>\n The extensive research we have done in 2020 and 2021 showed us that MDN users\n would appreciate a customized experience on MDN. We’ve got information on what\n you would find useful and what you would be interested in. All the premium\n features we propose today reflect that feedback. MDN Plus is an initial step\n towards making the experience on the site more interactive and helpful for our\n users.\n</p>","<h2 id=\"how-much-does-mdn-plus-cost-\">How much does MDN Plus cost?</h2>\n<p>\n A three-tiered pricing model has been put in place in order to try and\n accommodate our users’ needs as much as possible:\n</p>\n<ul>\n <li>\n <em>MDN Core</em> - A free plan, for those ones who want to try out a limited version\n of the premium features.\n </li>\n <li>\n <em>MDN Plus 5</em> - A $5/month or $50/year plan that offers unlimited access to the\n premium features included in MDN Plus.\n </li>\n <li>\n <em>MDN Supporter 10</em> - A $10/month or $100/year plan for users who want to\n support MDN with a higher amount. On top of the MDN Plus premium features, MDN\n supporters will be able to contribute and shape the product moving forward, by\n having early access to premium features and a direct feedback channel with the\n MDN team.\n </li>\n</ul>\n<p>Subscribing for a yearly plan activates a 20% discount for all the paid options.</p>","<h2 id=\"can-i-upgrade/downgrade-my-plan-\">Can I upgrade/downgrade my plan?</h2>\n<p>\n Currently, you can only upgrade your plan. For getting a downgrade, please\n cancel your current subscription first and then activate the new one.\n</p>","<h2 id=\"what-is-happening-with-the-existing-mdn-web-docs-\">What is happening with the existing MDN Web Docs?</h2>\n<p>\n Nothing. We will continue to develop &amp; maintain our web documentation that will\n remain free and accessible for everyone. There will be no change there. Even\n more, we believe that MDN Web Docs will benefit from MDN Plus, as we plan to\n reinvest part of the gains from MDN Plus and improve our documentation as well\n as the overall user experience on the website.\n</p>","<h2 id=\"are-we-violating-any-os-license-obligation-by-adding-a-paid-product-to-mdn-\">Are we violating any OS license obligation by adding a paid product to MDN?</h2>\n<p>\n MDN content is made available under a CC BY-SA 2.5 license. That license doesn't\n preclude Mozilla (or other users of MDN content) from having a paid product. MDN\n Plus adds premium features like updates and collections on top of the free\n content. Regular users can still access and reuse MDN content under the Creative\n Commons license.\n</p>","<h2 id=\"where-will-the-money-from-mdn-plus-go-\">Where will the money from MDN Plus go?</h2>\n<p>\n Since its beginning in 2005, MDN Web Docs has been a project hosted and provided\n by Mozilla. Mozilla covers the cost of infrastructure, development and\n maintenance of the MDN platform, including a team of engineers and its own team\n of dedicated writers.\n</p>\n<p>\n Mozilla wants MDN Plus to help ensure that MDN's open source content continues\n to be supported into the future. MDN Plus has been built only with Mozilla\n resources, and any revenue generated by MDN Plus will stay within Mozilla. We\n are looking into ways to reinvest some of these additional funds into open\n source projects contributing to MDN but it is still in the early stages.\n</p>","<h2 id=\"does-the-launch-of-mdn-plus-impact-the-relationship-with-partners-like-owd-\">Does the launch of MDN Plus impact the relationship with partners like OWD?</h2>\n<p>\n The existence of a new subscription model will not detract from MDN's current\n free Web Docs offering in any way. The current experience of accessing web\n documentation will not change for users who do not wish to sign up for a premium\n subscription. Open Web Docs (OWD) and Mozilla will continue to work closely\n together on MDN for the best possible web platform documentation for everyone.\n For more information about how our organizations work together, please check\n <a href=\"https://hacks.mozilla.org/2022/03/mozilla-and-open-web-docs-working-together-on-mdn/\">this article</a>.\n</p>","<h2 id=\"what-regions-is-mdn-plus-available-in-\">What regions is MDN Plus available in?</h2>\n<p>\n The free version of MDN Plus is available worldwide. Anyone can create an MDN\n Plus account and try out a limited version of the premium features. As for the\n paid plans, they are currently available as follows: in the United States,\n Canada (since March 24th, 2022), Austria, Belgium, Finland, France, the United\n Kingdom, Germany, Ireland, Italy, Malaysia, the Netherlands, New Zealand, Puerto\n Rico, Sweden, Singapore, Switzerland, Spain (since April 28th, 2022), Estonia,\n Greece, Latvia, Lithuania, Portugal, Slovakia and Slovenia (since June 15th,\n 2022). We are working on expanding this list even further.\n</p>","<h2 id=\"i-have-an-idea-for-mdn-plus-who-should-i-contact-\">I have an idea for MDN Plus, who should I contact?</h2>\n<p>\n In case you have an idea you would like to share about MDN Plus, you can add\n your suggestions to our <a href=\"https://github.com/mdn/mdn-community\">mdn-community</a>\n repo.\n</p>\n<p>\n If a subscriber, you can also leave us feedback by accessing the ‘Feedback’\n option in the user menu.\n</p>"],"toc":[{"id":"what-is-mdn-plus-","text":"What is MDN Plus?"},{"id":"why-are-we-working-on-premium-features-on-mdn-","text":"Why are we working on premium features on MDN?"},{"id":"how-much-does-mdn-plus-cost-","text":"How much does MDN Plus cost?"},{"id":"can-i-upgrade/downgrade-my-plan-","text":"Can I upgrade/downgrade my plan?"},{"id":"what-is-happening-with-the-existing-mdn-web-docs-","text":"What is happening with the existing MDN Web Docs?"},{"id":"are-we-violating-any-os-license-obligation-by-adding-a-paid-product-to-mdn-","text":"Are we violating any OS license obligation by adding a paid product to MDN?"},{"id":"where-will-the-money-from-mdn-plus-go-","text":"Where will the money from MDN Plus go?"},{"id":"does-the-launch-of-mdn-plus-impact-the-relationship-with-partners-like-owd-","text":"Does the launch of MDN Plus impact the relationship with partners like OWD?"},{"id":"what-regions-is-mdn-plus-available-in-","text":"What regions is MDN Plus available in?"},{"id":"i-have-an-idea-for-mdn-plus-who-should-i-contact-","text":"I have an idea for MDN Plus, who should I contact?"}]},"pageTitle":"FAQ | MDN Plus","url":"/en-US/plus/docs/faq"}
{"hyData":{"id":"faq","title":"FAQ","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"frequently_asked_questions\">Frequently asked questions</h1>"}},{"type":"prose","value":{"id":"what_is_mdn_plus","title":"What is MDN Plus?","isH3":false,"content":"<p>\n MDN Plus is a premium subscription service launched in March 2022 by Mozilla.\n The service allows users to customize their MDN Web Docs experience through\n premium features such as <a href=\"/en-US/plus/docs/features/updates\">Updates</a>,\n <a href=\"/en-US/plus/docs/features/collections\">Collections</a> and\n <a href=\"/en-US/plus/docs/features/offline\">MDN Offline</a>.\n</p>"}},{"type":"prose","value":{"id":"why_are_we_working_on_premium_features_on_mdn","title":"Why are we working on premium features on MDN?","isH3":false,"content":"<p>\n The extensive research we have done in 2020 and 2021 showed us that MDN users\n would appreciate a customized experience on MDN. We’ve got information on what\n you would find useful and what you would be interested in. All the premium\n features we propose today reflect that feedback. MDN Plus is an initial step\n towards making the experience on the site more interactive and helpful for our\n users.\n</p>"}},{"type":"prose","value":{"id":"how_much_does_mdn_plus_cost","title":"How much does MDN Plus cost?","isH3":false,"content":"<p>\n A three-tiered pricing model has been put in place in order to try and\n accommodate our users’ needs as much as possible:\n</p>\n<ul>\n <li>\n <em>MDN Core</em> - A free plan, for those ones who want to try out a limited version\n of the premium features.\n </li>\n <li>\n <em>MDN Plus 5</em> - A $5/month or $50/year plan that offers unlimited access to the\n premium features included in MDN Plus.\n </li>\n <li>\n <em>MDN Supporter 10</em> - A $10/month or $100/year plan for users who want to\n support MDN with a higher amount. On top of the MDN Plus premium features, MDN\n supporters will be able to contribute and shape the product moving forward, by\n having early access to premium features and a direct feedback channel with the\n MDN team.\n </li>\n</ul>\n<p>Subscribing for a yearly plan activates a 20% discount for all the paid options.</p>"}},{"type":"prose","value":{"id":"can_i_upgradedowngrade_my_plan","title":"Can I upgrade/downgrade my plan?","isH3":false,"content":"<p>\n Currently, you can only upgrade your plan. For getting a downgrade, please\n cancel your current subscription first and then activate the new one.\n</p>"}},{"type":"prose","value":{"id":"what_is_happening_with_the_existing_mdn_web_docs","title":"What is happening with the existing MDN Web Docs?","isH3":false,"content":"<p>\n Nothing. We will continue to develop &amp; maintain our web documentation that will\n remain free and accessible for everyone. There will be no change there. Even\n more, we believe that MDN Web Docs will benefit from MDN Plus, as we plan to\n reinvest part of the gains from MDN Plus and improve our documentation as well\n as the overall user experience on the website.\n</p>"}},{"type":"prose","value":{"id":"are_we_violating_any_os_license_obligation_by_adding_a_paid_product_to_mdn","title":"Are we violating any OS license obligation by adding a paid product to MDN?","isH3":false,"content":"<p>\n MDN content is made available under a CC BY-SA 2.5 license. That license doesn't\n preclude Mozilla (or other users of MDN content) from having a paid product. MDN\n Plus adds premium features like updates and collections on top of the free\n content. Regular users can still access and reuse MDN content under the Creative\n Commons license.\n</p>"}},{"type":"prose","value":{"id":"where_will_the_money_from_mdn_plus_go","title":"Where will the money from MDN Plus go?","isH3":false,"content":"<p>\n Since its beginning in 2005, MDN Web Docs has been a project hosted and provided\n by Mozilla. Mozilla covers the cost of infrastructure, development and\n maintenance of the MDN platform, including a team of engineers and its own team\n of dedicated writers.\n</p>\n<p>\n Mozilla wants MDN Plus to help ensure that MDN's open source content continues\n to be supported into the future. MDN Plus has been built only with Mozilla\n resources, and any revenue generated by MDN Plus will stay within Mozilla. We\n are looking into ways to reinvest some of these additional funds into open\n source projects contributing to MDN but it is still in the early stages.\n</p>"}},{"type":"prose","value":{"id":"does_the_launch_of_mdn_plus_impact_the_relationship_with_partners_like_owd","title":"Does the launch of MDN Plus impact the relationship with partners like OWD?","isH3":false,"content":"<p>\n The existence of a new subscription model will not detract from MDN's current\n free Web Docs offering in any way. The current experience of accessing web\n documentation will not change for users who do not wish to sign up for a premium\n subscription. Open Web Docs (OWD) and Mozilla will continue to work closely\n together on MDN for the best possible web platform documentation for everyone.\n For more information about how our organizations work together, please check\n <a href=\"https://hacks.mozilla.org/2022/03/mozilla-and-open-web-docs-working-together-on-mdn/\">this article</a>.\n</p>"}},{"type":"prose","value":{"id":"what_regions_is_mdn_plus_available_in","title":"What regions is MDN Plus available in?","isH3":false,"content":"<p>\n The free version of MDN Plus is available worldwide. Anyone can create an MDN\n Plus account and try out a limited version of the premium features. As for the\n paid plans, they are currently available as follows: in the United States,\n Canada (since March 24th, 2022), Austria, Belgium, Finland, France, the United\n Kingdom, Germany, Ireland, Italy, Malaysia, the Netherlands, New Zealand, Puerto\n Rico, Sweden, Singapore, Switzerland, Spain (since April 28th, 2022), Estonia,\n Greece, Latvia, Lithuania, Portugal, Slovakia and Slovenia (since June 15th,\n 2022). We are working on expanding this list even further.\n</p>"}},{"type":"prose","value":{"id":"i_have_an_idea_for_mdn_plus_who_should_i_contact","title":"I have an idea for MDN Plus, who should I contact?","isH3":false,"content":"<p>\n In case you have an idea you would like to share about MDN Plus, you can add\n your suggestions to our <a href=\"https://github.com/mdn/mdn-community\">mdn-community</a>\n repo.\n</p>\n<p>\n If a subscriber, you can also leave us feedback by accessing the ‘Feedback’\n option in the user menu.\n</p>"}}],"toc":[{"text":"What is MDN Plus?","id":"what_is_mdn_plus"},{"text":"Why are we working on premium features on MDN?","id":"why_are_we_working_on_premium_features_on_mdn"},{"text":"How much does MDN Plus cost?","id":"how_much_does_mdn_plus_cost"},{"text":"Can I upgrade/downgrade my plan?","id":"can_i_upgradedowngrade_my_plan"},{"text":"What is happening with the existing MDN Web Docs?","id":"what_is_happening_with_the_existing_mdn_web_docs"},{"text":"Are we violating any OS license obligation by adding a paid product to MDN?","id":"are_we_violating_any_os_license_obligation_by_adding_a_paid_product_to_mdn"},{"text":"Where will the money from MDN Plus go?","id":"where_will_the_money_from_mdn_plus_go"},{"text":"Does the launch of MDN Plus impact the relationship with partners like OWD?","id":"does_the_launch_of_mdn_plus_impact_the_relationship_with_partners_like_owd"},{"text":"What regions is MDN Plus available in?","id":"what_regions_is_mdn_plus_available_in"},{"text":"I have an idea for MDN Plus, who should I contact?","id":"i_have_an_idea_for_mdn_plus_who_should_i_contact"}]},"pageTitle":"FAQ | MDN Plus","url":"/en-US/plus/docs/faq"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/ai-help","title":"AI Help","sections":["<h1>AI Help</h1>\n<blockquote>\n <p>Get real-time assistance and support</p>\n</blockquote>\n<p>\n AI Help, available for both free and paid MDN Plus subscribers, utilizes OpenAI\n GPT-4o mini for free users and GPT-4o for paying subscribers to enhance the MDN\n experience. It offers quick and effective access to MDN's broad database. It\n specializes in searching and summarizing MDN content to directly address your\n queries. Additionally, for web development queries not covered in MDN, AI Help\n draws on its external knowledge, always indicating when the sources are from\n outside MDN.\n</p>","<h2 id=\"key-features\">Key Features</h2>\n<ul>\n <li>\n <strong>Asking Questions</strong>: You can ask your web development related questions\n directly on MDN, in AI Help.\n </li>\n <li>\n <strong>Content Search</strong>: AI Help locates relevant articles from MDN's pages and\n presents them to you.\n </li>\n <li>\n <strong>Summary Generation</strong>: It offers concise summaries as answers to your\n questions, providing the option to explore the sources directly, read the\n summary, or both.\n </li>\n <li>\n <strong>Code Testing</strong>: When articles include code examples, you can test the code\n directly in the <a href=\"/en-US/play\">MDN Playground</a>, allowing you to immediately\n check the code accuracy.\n </li>\n</ul>","<h2 id=\"how-to-use-ai-help\">How to Use AI Help</h2>\n<p>Navigate to <a href=\"/en-US/plus/ai-help\">AI Help</a> via the top menu bar on MDN pages.</p>\n<p>\n If you're not logged in or don't have an MDN Plus account, you'll be prompted to\n sign up or log in using your Mozilla Account.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/login-signup.png\" alt=\"Screenshot of AI Help page as non-logged in user, AI Help button highlighted as well as the Log in/Sign up options\">\n</p>\n<p>\n Once logged in, you'll access AI Help's main page where you can select from the\n suggested questions or input your own.\n</p>\n<p>\n AI Help will search MDN and display the consulted pages in real time with\n summary links.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/example-question-answering.png\" alt=\"Screenshot of logged-in AI Help page, AI Help Search highlighted, questions inserted and answer generated\">\n</p>\n<p>\n You’ll be able to <strong>Edit</strong> your question by using the edit option, and AI Help\n will provide you with a new answer.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/example-question-editing.png\" alt=\"Screenshot of logged-in AI Help page, AI Help Edit option opened and highlighted, on the same question as above\">\n</p>\n<h3>Chat History</h3>\n<p>Enable chat history to save your interactions and come back later to them.</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/history-banner.png\" alt=\"Screenshot of same logged-in AI Help page, AI Help Chat History highlighted with click on button ‘Enable History’\">\n</p>\n<p>\n You can also manage your history directly from your Account Settings, and\n disable or delete it at any time.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/history-settings.png\" alt=\"Screenshot of Account Settings page, with Chat History Enable and Delete highlighted’\">\n</p>\n<h3>Code Testing</h3>\n<p>\n Select code examples and test them in the MDN Playground for a quick check of\n code accuracy and a seamless coding experience.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/code-examples-queue.png\" alt=\"Screenshot of an AI Help answer with code examples that are being added to a list for sending them to the Playground\">\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/code-examples-playground.png\" alt=\"Screenshot with code examples opened in the Playground\">\n</p>\n<h3>Feedback</h3>\n<p>You can rate answers using the thumbs-up/down mechanism.</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/rate-answers.png\" alt=\"Screenshot with thumbs up/down highlighted\">\n</p>\n<p>\n If you think an answer is incorrect or unhelpful, file an issue using the\n provided template, and one of our engineers will look into it and get back to\n you quickly.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/issue-template.png\" alt=\"Screenshot with Github issue template open\">\n</p>\n<p>\n You can also use the dedicated feedback link on the AI Help page for general\n feedback about the feature.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/report-feedback.png\" alt=\"Screenshot with the general feedback link highlighted\">\n</p>\n<p>Thank you for using AI Help to enhance your MDN experience!</p>"],"toc":[{"id":"key-features","text":"Key Features"},{"id":"how-to-use-ai-help","text":"How to Use AI Help"}]},"pageTitle":"AI Help | MDN Plus","url":"/en-US/plus/docs/features/ai-help"}
{"hyData":{"id":"features/ai-help","title":"AI Help","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"ai_help\">AI Help</h1>\n<blockquote>\n <p>Get real-time assistance and support</p>\n</blockquote>\n<p>\n AI Help, available for both free and paid MDN Plus subscribers, utilizes OpenAI\n GPT-4o mini for free users and GPT-4o for paying subscribers to enhance the MDN\n experience. It offers quick and effective access to MDN's broad database. It\n specializes in searching and summarizing MDN content to directly address your\n queries. Additionally, for web development queries not covered in MDN, AI Help\n draws on its external knowledge, always indicating when the sources are from\n outside MDN.\n</p>"}},{"type":"prose","value":{"id":"key_features","title":"Key Features","isH3":false,"content":"<ul>\n <li>\n <strong>Asking Questions</strong>: You can ask your web development related questions\n directly on MDN, in AI Help.\n </li>\n <li>\n <strong>Content Search</strong>: AI Help locates relevant articles from MDN's pages and\n presents them to you.\n </li>\n <li>\n <strong>Summary Generation</strong>: It offers concise summaries as answers to your\n questions, providing the option to explore the sources directly, read the\n summary, or both.\n </li>\n <li>\n <strong>Code Testing</strong>: When articles include code examples, you can test the code\n directly in the <a href=\"/en-US/play\">MDN Playground</a>, allowing you to immediately\n check the code accuracy.\n </li>\n</ul>"}},{"type":"prose","value":{"id":"how_to_use_ai_help","title":"How to Use AI Help","isH3":false,"content":"<p>Navigate to <a href=\"/en-US/plus/ai-help\">AI Help</a> via the top menu bar on MDN pages.</p>\n<p>\n If you're not logged in or don't have an MDN Plus account, you'll be prompted to\n sign up or log in using your Mozilla Account.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/login-signup.png\" alt=\"Screenshot of AI Help page as non-logged in user, AI Help button highlighted as well as the Log in/Sign up options\">\n</p>\n<p>\n Once logged in, you'll access AI Help's main page where you can select from the\n suggested questions or input your own.\n</p>\n<p>\n AI Help will search MDN and display the consulted pages in real time with\n summary links.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/example-question-answering.png\" alt=\"Screenshot of logged-in AI Help page, AI Help Search highlighted, questions inserted and answer generated\">\n</p>\n<p>\n You’ll be able to <strong>Edit</strong> your question by using the edit option, and AI Help\n will provide you with a new answer.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/example-question-editing.png\" alt=\"Screenshot of logged-in AI Help page, AI Help Edit option opened and highlighted, on the same question as above\">\n</p>"}},{"type":"prose","value":{"id":"chat_history","title":"Chat History","isH3":true,"content":"<p>Enable chat history to save your interactions and come back later to them.</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/history-banner.png\" alt=\"Screenshot of same logged-in AI Help page, AI Help Chat History highlighted with click on button ‘Enable History’\">\n</p>\n<p>\n You can also manage your history directly from your Account Settings, and\n disable or delete it at any time.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/history-settings.png\" alt=\"Screenshot of Account Settings page, with Chat History Enable and Delete highlighted’\">\n</p>"}},{"type":"prose","value":{"id":"code_testing","title":"Code Testing","isH3":true,"content":"<p>\n Select code examples and test them in the MDN Playground for a quick check of\n code accuracy and a seamless coding experience.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/code-examples-queue.png\" alt=\"Screenshot of an AI Help answer with code examples that are being added to a list for sending them to the Playground\">\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/code-examples-playground.png\" alt=\"Screenshot with code examples opened in the Playground\">\n</p>"}},{"type":"prose","value":{"id":"feedback","title":"Feedback","isH3":true,"content":"<p>You can rate answers using the thumbs-up/down mechanism.</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/rate-answers.png\" alt=\"Screenshot with thumbs up/down highlighted\">\n</p>\n<p>\n If you think an answer is incorrect or unhelpful, file an issue using the\n provided template, and one of our engineers will look into it and get back to\n you quickly.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/issue-template.png\" alt=\"Screenshot with Github issue template open\">\n</p>\n<p>\n You can also use the dedicated feedback link on the AI Help page for general\n feedback about the feature.\n</p>\n<p>\n <img src=\"/assets/plus-docs/ai-help/report-feedback.png\" alt=\"Screenshot with the general feedback link highlighted\">\n</p>\n<p>Thank you for using AI Help to enhance your MDN experience!</p>"}}],"toc":[{"text":"Key Features","id":"key_features"},{"text":"How to Use AI Help","id":"how_to_use_ai_help"}]},"pageTitle":"AI Help | MDN Plus","url":"/en-US/plus/docs/features/ai-help"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/collections","title":"Collections","sections":["<h1>Collections</h1>\n<blockquote>\n <p>MDN. Hand <em>selected</em> by you.</p>\n <p>\n Collections allow you to save MDN articles and share your library across\n devices. We also automatically save for you the pages you visit most\n frequently. They will help you find what you need quicker by showing first in\n your search results when looking for a relevant topic and you’ll be able to\n curate the lists to your liking.\n </p>\n</blockquote>","<h2 id=\"getting-started\">Getting started</h2>\n<p>To start creating your Collections, <strong>Save a page</strong> first.</p>\n<h3>Desktop</h3>\n<ol>\n <li>\n Select <strong>Save</strong> at the top of the page.\n \n <img src=\"/assets/plus-docs/collections/desktop-saving-page.png\" alt=\"Screenshot showing save button highlighted at the top right of the page.\">\n </li>\n <li>\n Click <strong>Save</strong> in the dialog that opens.\n \n <img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing collections dialog with save button highlighted.\">\n </li>\n</ol>\n<h3>Mobile</h3>\n<ol>\n <li>\n <strong>Open the ⋮ menu</strong>\n <img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing three dot button highlighted at the top right of the page.\">\n </li>\n <li>\n Tap on <strong>Save</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-save-page.png\" alt=\"Screenshot showing the save menu entry highlighted.\">\n </li>\n <li>\n In the next view that opens, tap <strong>Save</strong>\n <img src=\"/assets/plus-docs/collections/mobile-save-page-step-one.png\" alt=\"Screenshot showing the save collection item view. This contains two inputs and two buttons one of which is the save button.\">\n </li>\n</ol>","<h2 id=\"reaching-the-collections-page\">Reaching the Collections page</h2>\n<p>When an article is saved, it appears in <strong>Collections</strong>.</p>\n<h3>Desktop</h3>\n<ol>\n <li>\n Click on your avatar at the top-right and select <strong>Collections</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-user-menu.png\" alt=\"Screenshot showing the user menu entry expanded. This reveals a number of options the second of which is Collections.\">\n </li>\n</ol>\n<h3>Mobile</h3>\n<ol>\n <li>\n Open the main menu by tapping on the <strong>burger menu icon</strong> at the top right of\n the page.\n \n <img src=\"/assets/plus-docs/collections/mobile-burger-menu.png\" alt=\"Screenshot showing the burger menu icon highlighted.\">\n </li>\n <li>\n Click on your avatar / email address at the bottom of the menu.\n \n <img src=\"/assets/plus-docs/collections/mobile-menu.png\" alt=\"Screenshot showing the expanded user menu.\">\n </li>\n <li>\n From the submenu, tap on <strong>Collections</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-menu-item.png\" alt=\"Screenshot showing the expanded submenu with Collections highlighted.\">\n </li>\n</ol>","<h2 id=\"the-collections-page-overview\">The Collections page overview</h2>\n<p>\n Your saved articles will appear on the collections dashboard accessible from the\n <strong>MDN Plus → Collections</strong> link.\n</p>\n<h3>Desktop</h3>\n<p>\n <img src=\"/assets/plus-docs/collections/collections-dashboard.png\" alt=\"Screenshot showing the collections dashboard. The dashboard shows a list of all pages you have saved.\">\n</p>\n<h3>Mobile</h3>\n<p>\n <img src=\"/assets/plus-docs/collections/mobile-collections-dashboard.png\" alt=\"Screenshot showing the collections dashboard on mobile. The dashboard shows a list of all pages you have saved.\">\n</p>","<h2 id=\"adding-notes\">Adding notes</h2>\n<h3>Desktop</h3>\n<p>Add notes from <strong>an article page</strong></p>\n<ol>\n <li>\n Select <strong>Saved</strong> at the top of the page.\n \n <img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing and article page that has been saved to your collections. The saved button located at the top right of the page is highlighted.\">\n </li>\n <li>\n Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-page-add-note.png\" alt=\"Screenshot showing the collection dialog. It contains two input fields and two buttons. The second input field is for notes.\">\n </li>\n</ol>\n<p>Add notes from <strong>Collections</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the bookmark and select <strong>Edit</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-three-dot-menu.png\" alt=\"Screenshot showing the collection dashboard. On the right of an entry is a three dot menu item which is highlighted\">\n </li>\n <li>\n Select <strong>Edit</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-edit-menu.png\" alt=\"Screenshot showing the expanded three dot menu. This reveals two options, the first of which is edit.\">\n </li>\n <li>\n Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-edit-dialog-add-note.png\" alt=\"Screenshot showing the edit collection entry dialog. It contains two input fields and two buttons. The second input field is for notes.\">\n </li>\n</ol>\n<h3>Mobile</h3>\n<p>Add notes from <strong>an article page</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved article\n \n <img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing the three dot menu at the top right.\">\n </li>\n <li>\n Select <strong>Saved</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-saved-page.png\" alt=\"Screenshot showing the article actions menu with the saved menu entry highlighted.\">\n </li>\n <li>\n Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-add-note.png\" alt=\"Screenshot showing the edit saved collection entry view. It contains two input fields and two buttons. The second input field is for notes.\">\n </li>\n</ol>\n<p>Add notes from <strong>Collections</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved article and select <strong>Edit</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-dashboard-edit.png\" alt=\"Screenshot showing the expanded three dot menu located to the right of a collection entry. The first option is edit.\">\n </li>\n <li>\n Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-add-note.png\" alt=\"Screenshot showing the edit saved collection entry view. It contains two input fields and two buttons. The second input field is for notes.\">\n </li>\n</ol>","<h2 id=\"removing-a-saved-page\">Removing a saved page</h2>\n<h3>Desktop</h3>\n<p>Remove a saved page from <strong>an article page</strong></p>\n<ol>\n <li>\n Select <strong>Saved</strong> at the top of the page.\n \n <img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing and article page that has been saved to your collections. The saved button located at the top right of the page is highlighted.\">\n </li>\n <li>\n Select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-remove-saved-delete.png\" alt=\"Screenshot showing the collection dialog. It contains two input fields and two buttons. The second button is delete, which is also highlighted\">\n </li>\n</ol>\n<p>Remove a saved page from <strong>Collections</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-dashboard-delete.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\">\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\">\n </li>\n</ol>\n<h3>Mobile</h3>\n<p>Remove a saved page from <strong>an article page</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved article\n \n <img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing the three dot menu at the top right.\">\n </li>\n <li>\n Select <strong>Saved</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-saved-page.png\" alt=\"Screenshot showing the article actions menu with the saved menu entry highlighted.\">\n </li>\n <li>\n Select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-delete-entry.png\" alt=\"Screenshot showing the edit view on mobile. It contains two input fields and two buttons. The second button is delete, which is also highlighted\">\n </li>\n</ol>\n<p>Remove a saved page from <strong>Collections</strong></p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-dashboard-delete-entry.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\">\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\">\n </li>\n</ol>","<h2 id=\"filtering-saved-pages\">Filtering saved pages</h2>\n<p>\n Saved pages can be filtered by searching Title keywords through the page search\n bar.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-filter.png\" alt=\"Screenshot showing collections dashboard highlighting text inside the filter input element.\">\n</p>","<h2 id=\"sorting-saved-pages\">Sorting saved pages</h2>\n<p>\n Saved pages can be sorted by Date added and Title. The input element is located\n to the right of the Collections search input.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-sort.png\" alt=\"Screenshot showing collections dashboard with sort element expanded showing the date and title sorting options.\">\n</p>","<h2 id=\"frequently-viewed-articles\">Frequently viewed articles</h2>\n<p>\n These are collections we automatically create for you, based on your activity\n while being logged into MDN Plus. As an MDN Plus user, you are automatically\n opted into this feature.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-fva.png\" alt=\"Screenshot showing collections dashboard with the frequently viewed articles tab active.\">\n</p>","<h2 id=\"how-are-these-articles-generated-\">How are these articles generated?</h2>\n<p>\n Frequently viewed pages are articles you visit most frequently while logged into\n MDN Plus. We will always show you your most recent top viewed 20 pages.\n</p>","<h2 id=\"remove-a-saved-page-from-frequently-viewed-articles\">Remove a saved page from Frequently viewed articles</h2>\n<h3>Desktop</h3>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-delete-fva.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\">\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\">\n </li>\n</ol>\n<h3>Mobile</h3>\n<p>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>. Your\n saved page has now been removed. Select <strong>Undo</strong> in the notification at the\n bottom of the screen to revert this action.\n</p>\n<ol>\n <li>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n \n <img src=\"/assets/plus-docs/collections/desktop-collections-delete-fva.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\">\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n \n <img src=\"/assets/plus-docs/collections/mobile-collections-fva-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\">\n </li>\n</ol>"],"toc":[{"id":"getting-started","text":"Getting started"},{"id":"reaching-the-collections-page","text":"Reaching the Collections page"},{"id":"the-collections-page-overview","text":"The Collections page overview"},{"id":"adding-notes","text":"Adding notes"},{"id":"removing-a-saved-page","text":"Removing a saved page"},{"id":"filtering-saved-pages","text":"Filtering saved pages"},{"id":"sorting-saved-pages","text":"Sorting saved pages"},{"id":"frequently-viewed-articles","text":"Frequently viewed articles"},{"id":"how-are-these-articles-generated-","text":"How are these articles generated?"},{"id":"remove-a-saved-page-from-frequently-viewed-articles","text":"Remove a saved page from Frequently viewed articles"}]},"pageTitle":"Collections | MDN Plus","url":"/en-US/plus/docs/features/collections"}
{"hyData":{"id":"features/collections","title":"Collections","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"collections\">Collections</h1>\n<blockquote>\n <p>MDN. Hand <em>selected</em> by you.</p>\n <p>\n Collections allow you to save MDN articles and share your library across\n devices. We also automatically save for you the pages you visit most\n frequently. They will help you find what you need quicker by showing first in\n your search results when looking for a relevant topic and you’ll be able to\n curate the lists to your liking.\n </p>\n</blockquote>"}},{"type":"prose","value":{"id":"getting_started","title":"Getting started","isH3":false,"content":"<p>To start creating your Collections, <strong>Save a page</strong> first.</p>"}},{"type":"prose","value":{"id":"desktop","title":"Desktop","isH3":true,"content":"<ol>\n <li>Select <strong>Save</strong> at the top of the page.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-saving-page.png\" alt=\"Screenshot showing save button highlighted at the top right of the page.\"&gt;\n</pre>\n </li>\n <li>Click <strong>Save</strong> in the dialog that opens.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing collections dialog with save button highlighted.\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"mobile","title":"Mobile","isH3":true,"content":"<ol>\n <li>\n <strong>Open the ⋮ menu</strong>\n <img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing three dot button highlighted at the top right of the page.\">\n </li>\n <li>Tap on <strong>Save</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-save-page.png\" alt=\"Screenshot showing the save menu entry highlighted.\"&gt;\n</pre>\n </li>\n <li>\n In the next view that opens, tap <strong>Save</strong>\n <img src=\"/assets/plus-docs/collections/mobile-save-page-step-one.png\" alt=\"Screenshot showing the save collection item view. This contains two inputs and two buttons one of which is the save button.\">\n </li>\n</ol>"}},{"type":"prose","value":{"id":"reaching_the_collections_page","title":"Reaching the Collections page","isH3":false,"content":"<p>When an article is saved, it appears in <strong>Collections</strong>.</p>"}},{"type":"prose","value":{"id":"desktop_2","title":"Desktop","isH3":true,"content":"<ol>\n <li>Click on your avatar at the top-right and select <strong>Collections</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-user-menu.png\" alt=\"Screenshot showing the user menu entry expanded. This reveals a number of options the second of which is Collections.\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"mobile_2","title":"Mobile","isH3":true,"content":"<ol>\n <li>\n Open the main menu by tapping on the <strong>burger menu icon</strong> at the top right of\n the page.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-burger-menu.png\" alt=\"Screenshot showing the burger menu icon highlighted.\"&gt;\n</pre>\n </li>\n <li>Click on your avatar / email address at the bottom of the menu.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-menu.png\" alt=\"Screenshot showing the expanded user menu.\"&gt;\n</pre>\n </li>\n <li>From the submenu, tap on <strong>Collections</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-menu-item.png\" alt=\"Screenshot showing the expanded submenu with Collections highlighted.\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"the_collections_page_overview","title":"The Collections page overview","isH3":false,"content":"<p>\n Your saved articles will appear on the collections dashboard accessible from the\n <strong>MDN Plus → Collections</strong> link.\n</p>"}},{"type":"prose","value":{"id":"desktop_3","title":"Desktop","isH3":true,"content":"<p>\n <img src=\"/assets/plus-docs/collections/collections-dashboard.png\" alt=\"Screenshot showing the collections dashboard. The dashboard shows a list of all pages you have saved.\">\n</p>"}},{"type":"prose","value":{"id":"mobile_3","title":"Mobile","isH3":true,"content":"<p>\n <img src=\"/assets/plus-docs/collections/mobile-collections-dashboard.png\" alt=\"Screenshot showing the collections dashboard on mobile. The dashboard shows a list of all pages you have saved.\">\n</p>"}},{"type":"prose","value":{"id":"adding_notes","title":"Adding notes","isH3":false,"content":""}},{"type":"prose","value":{"id":"desktop_4","title":"Desktop","isH3":true,"content":"<p>Add notes from <strong>an article page</strong></p>\n<ol>\n <li>Select <strong>Saved</strong> at the top of the page.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing and article page that has been saved to your collections. The saved button located at the top right of the page is highlighted.\"&gt;\n</pre>\n </li>\n <li>Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-page-add-note.png\" alt=\"Screenshot showing the collection dialog. It contains two input fields and two buttons. The second input field is for notes.\"&gt;\n</pre>\n </li>\n</ol>\n<p>Add notes from <strong>Collections</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the bookmark and select <strong>Edit</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-three-dot-menu.png\" alt=\"Screenshot showing the collection dashboard. On the right of an entry is a three dot menu item which is highlighted\"&gt;\n</pre>\n </li>\n <li>Select <strong>Edit</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-edit-menu.png\" alt=\"Screenshot showing the expanded three dot menu. This reveals two options, the first of which is edit.\"&gt;\n</pre>\n </li>\n <li>Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-edit-dialog-add-note.png\" alt=\"Screenshot showing the edit collection entry dialog. It contains two input fields and two buttons. The second input field is for notes.\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"mobile_4","title":"Mobile","isH3":true,"content":"<p>Add notes from <strong>an article page</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved article\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing the three dot menu at the top right.\"&gt;\n</pre>\n </li>\n <li>Select <strong>Saved</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-saved-page.png\" alt=\"Screenshot showing the article actions menu with the saved menu entry highlighted.\"&gt;\n</pre>\n </li>\n <li>Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-add-note.png\" alt=\"Screenshot showing the edit saved collection entry view. It contains two input fields and two buttons. The second input field is for notes.\"&gt;\n</pre>\n </li>\n</ol>\n<p>Add notes from <strong>Collections</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved article and select <strong>Edit</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-dashboard-edit.png\" alt=\"Screenshot showing the expanded three dot menu located to the right of a collection entry. The first option is edit.\"&gt;\n</pre>\n </li>\n <li>Type the note you’d like to add in the <strong>Note</strong> field and select <strong>Save</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-add-note.png\" alt=\"Screenshot showing the edit saved collection entry view. It contains two input fields and two buttons. The second input field is for notes.\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"removing_a_saved_page","title":"Removing a saved page","isH3":false,"content":""}},{"type":"prose","value":{"id":"desktop_5","title":"Desktop","isH3":true,"content":"<p>Remove a saved page from <strong>an article page</strong></p>\n<ol>\n <li>Select <strong>Saved</strong> at the top of the page.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-page-dialog-save.png\" alt=\"Screenshot showing and article page that has been saved to your collections. The saved button located at the top right of the page is highlighted.\"&gt;\n</pre>\n </li>\n <li>Select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-remove-saved-delete.png\" alt=\"Screenshot showing the collection dialog. It contains two input fields and two buttons. The second button is delete, which is also highlighted\"&gt;\n</pre>\n </li>\n</ol>\n<p>Remove a saved page from <strong>Collections</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-dashboard-delete.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\"&gt;\n</pre>\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"mobile_5","title":"Mobile","isH3":true,"content":"<p>Remove a saved page from <strong>an article page</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved article\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-open-article-actions.png\" alt=\"Screenshot showing the three dot menu at the top right.\"&gt;\n</pre>\n </li>\n <li>Select <strong>Saved</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-saved-page.png\" alt=\"Screenshot showing the article actions menu with the saved menu entry highlighted.\"&gt;\n</pre>\n </li>\n <li>Select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-delete-entry.png\" alt=\"Screenshot showing the edit view on mobile. It contains two input fields and two buttons. The second button is delete, which is also highlighted\"&gt;\n</pre>\n </li>\n</ol>\n<p>Remove a saved page from <strong>Collections</strong></p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-dashboard-delete-entry.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\"&gt;\n</pre>\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"filtering_saved_pages","title":"Filtering saved pages","isH3":false,"content":"<p>\n Saved pages can be filtered by searching Title keywords through the page search\n bar.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-filter.png\" alt=\"Screenshot showing collections dashboard highlighting text inside the filter input element.\">\n</p>"}},{"type":"prose","value":{"id":"sorting_saved_pages","title":"Sorting saved pages","isH3":false,"content":"<p>\n Saved pages can be sorted by Date added and Title. The input element is located\n to the right of the Collections search input.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-sort.png\" alt=\"Screenshot showing collections dashboard with sort element expanded showing the date and title sorting options.\">\n</p>"}},{"type":"prose","value":{"id":"frequently_viewed_articles","title":"Frequently viewed articles","isH3":false,"content":"<p>\n These are collections we automatically create for you, based on your activity\n while being logged into MDN Plus. As an MDN Plus user, you are automatically\n opted into this feature.\n</p>\n<p>\n <img src=\"/assets/plus-docs/collections/desktop-collections-fva.png\" alt=\"Screenshot showing collections dashboard with the frequently viewed articles tab active.\">\n</p>"}},{"type":"prose","value":{"id":"how_are_these_articles_generated","title":"How are these articles generated?","isH3":false,"content":"<p>\n Frequently viewed pages are articles you visit most frequently while logged into\n MDN Plus. We will always show you your most recent top viewed 20 pages.\n</p>"}},{"type":"prose","value":{"id":"remove_a_saved_page_from_frequently_viewed_articles","title":"Remove a saved page from Frequently viewed articles","isH3":false,"content":""}},{"type":"prose","value":{"id":"desktop_6","title":"Desktop","isH3":true,"content":"<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-delete-fva.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\"&gt;\n</pre>\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"mobile_6","title":"Mobile","isH3":true,"content":"<p>\n Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>. Your\n saved page has now been removed. Select <strong>Undo</strong> in the notification at the\n bottom of the screen to revert this action.\n</p>\n<ol>\n <li>Click the <strong>⋮ menu</strong> to the right of the saved page and select <strong>Delete</strong>.\n <pre>&lt;img src=\"/assets/plus-docs/collections/desktop-collections-delete-fva.png\" alt=\"Screenshot showing the expanded three dots icon. There are two options, the second of which is delete.\"&gt;\n</pre>\n </li>\n <li>\n Your saved page has now been removed. Select <strong>Undo</strong> in the notification at\n the bottom of the screen to revert this action.\n <pre>&lt;img src=\"/assets/plus-docs/collections/mobile-collections-fva-undo.png\" alt=\"Screenshot showing the undo toast dialog at the bottom of the page. The undo button located on the right is highlighted\"&gt;\n</pre>\n </li>\n</ol>"}}],"toc":[{"text":"Getting started","id":"getting_started"},{"text":"Reaching the Collections page","id":"reaching_the_collections_page"},{"text":"The Collections page overview","id":"the_collections_page_overview"},{"text":"Adding notes","id":"adding_notes"},{"text":"Removing a saved page","id":"removing_a_saved_page"},{"text":"Filtering saved pages","id":"filtering_saved_pages"},{"text":"Sorting saved pages","id":"sorting_saved_pages"},{"text":"Frequently viewed articles","id":"frequently_viewed_articles"},{"text":"How are these articles generated?","id":"how_are_these_articles_generated"},{"text":"Remove a saved page from Frequently viewed articles","id":"remove_a_saved_page_from_frequently_viewed_articles"}]},"pageTitle":"Collections | MDN Plus","url":"/en-US/plus/docs/features/collections"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/offline","title":"MDN Offline","sections":["<h1>MDN Offline</h1>\n<blockquote>\n <p><em>Web docs without web access</em>: the full power of MDN, offline</p>\n <p>\n Leverage the offline capability of our <strong>MDN PWA</strong> to work on the go. Whether\n you're in a high-speed train, a cabin in the woods or just looking to save\n some data, MDN Offline gives you access to the full power of your favorite dev\n resource, so your projects aren't interrupted. The site is snappier and your\n experience better.\n </p>\n</blockquote>\n<p>\n When you need access to MDN even without an internet connection, <strong>MDN Offline</strong>\n allows you to browse the most up to date version of the site, or simply to have\n a faster experience while saving data.\n</p>","<h2 id=\"getting-started\">Getting started</h2>\n<p>To start using MDN Offline, you must first <strong>Enable offline storage</strong>.</p>\n<ol>\n <li>\n Click on your avatar(top-right) and open the <strong>user menu → My Settings</strong>\n <img src=\"/assets/plus-docs/offline/desktop-offline-user-menu.png\" alt=\"Screenshot showing expanded user menu revealing the MDN Offline menu option.\">\n </li>\n <li>\n Under <strong>MDN Offline</strong> use the <strong>Enable offline storage</strong> switch.\n \n <img src=\"/assets/plus-docs/offline/desktop-offline-enable-offline.png\" alt=\"Screenshot showing MDN Offline page with the enable offline toggle highlighted.\">\n </li>\n</ol>\n<p>\n You can also add it to your homescreen for an experience similar to using a\n native app.\n</p>","<h2 id=\"choose-how-to-stay-up-to-date\">Choose how to stay up-to-date</h2>\n<ol>\n <li>\n Enable offline storage\n \n <img src=\"/assets/plus-docs/offline/desktop-offline-enable-offline.png\" alt=\"Screenshot showing MDN Offline page with the enable offline toggle highlighted.\">\n </li>\n <li>Choose how to update</li>\n <li>\n Manually update by clicking <strong>Update now</strong> or <strong>Enable auto-update</strong>\n <img src=\"/assets/plus-docs/offline/desktop-offline-enable-auto-update.png\" alt=\"Screenshot showing MDN Offline page with the auto update toggle highlighted.\">\n </li>\n <li>\n Clicking <strong>Update now</strong> will start the download of the latest version of MDN\n Web Docs.\n \n <img src=\"/assets/plus-docs/offline/desktop-offline-manual-update.png\" alt=\"Screenshot showing MDN Offline page with the update now button highlighted.\">\n </li>\n <li>The date of the last update is also shown.</li>\n</ol>","<h2 id=\"clear-stored-data\">Clear stored data</h2>\n<p>Open the user menu → MDN Offline → Clear data</p>\n<p>\n <img src=\"/assets/plus-docs/offline/desktop-offline-clear-data.png\" alt=\"Screenshot showing MDN Offline page with the clear data button highlighted.\">\n</p>","<h2 id=\"supported-features\">Supported Features</h2>\n<p>Some insight into what can be expected from using MDN Offline</p>\n<h3>Browsing Content</h3>\n<p>\n If offline mode is enabled, offline content is preferred. All content works\n without an internet connection, with the exception of a few github-based\n examples and large video files. You can also indicate you prefer offline content\n even when online.\n</p>\n<blockquote>\n <p>NOTE: MDN Offline cannot be used while in a private or incognito window.</p>\n</blockquote>"],"toc":[{"id":"getting-started","text":"Getting started"},{"id":"choose-how-to-stay-up-to-date","text":"Choose how to stay up-to-date"},{"id":"clear-stored-data","text":"Clear stored data"},{"id":"supported-features","text":"Supported Features"}]},"pageTitle":"MDN Offline | MDN Plus","url":"/en-US/plus/docs/features/offline"}
{"hyData":{"id":"features/offline","title":"MDN Offline","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"mdn_offline\">MDN Offline</h1>\n<blockquote>\n <p><em>Web docs without web access</em>: the full power of MDN, offline</p>\n <p>\n Leverage the offline capability of our <strong>MDN PWA</strong> to work on the go. Whether\n you're in a high-speed train, a cabin in the woods or just looking to save\n some data, MDN Offline gives you access to the full power of your favorite dev\n resource, so your projects aren't interrupted. The site is snappier and your\n experience better.\n </p>\n</blockquote>\n<p>\n When you need access to MDN even without an internet connection, <strong>MDN Offline</strong>\n allows you to browse the most up to date version of the site, or simply to have\n a faster experience while saving data.\n</p>"}},{"type":"prose","value":{"id":"getting_started","title":"Getting started","isH3":false,"content":"<p>To start using MDN Offline, you must first <strong>Enable offline storage</strong>.</p>\n<ol>\n <li>\n Click on your avatar(top-right) and open the <strong>user menu → My Settings</strong>\n <img src=\"/assets/plus-docs/offline/desktop-offline-user-menu.png\" alt=\"Screenshot showing expanded user menu revealing the MDN Offline menu option.\">\n </li>\n <li>Under <strong>MDN Offline</strong> use the <strong>Enable offline storage</strong> switch.\n <pre>&lt;img src=\"/assets/plus-docs/offline/desktop-offline-enable-offline.png\" alt=\"Screenshot showing MDN Offline page with the enable offline toggle highlighted.\"&gt;\n</pre>\n </li>\n</ol>\n<p>\n You can also add it to your homescreen for an experience similar to using a\n native app.\n</p>"}},{"type":"prose","value":{"id":"choose_how_to_stay_up-to-date","title":"Choose how to stay up-to-date","isH3":false,"content":"<ol>\n <li>Enable offline storage\n <pre>&lt;img src=\"/assets/plus-docs/offline/desktop-offline-enable-offline.png\" alt=\"Screenshot showing MDN Offline page with the enable offline toggle highlighted.\"&gt;\n</pre>\n </li>\n <li>Choose how to update</li>\n <li>\n Manually update by clicking <strong>Update now</strong> or <strong>Enable auto-update</strong>\n <img src=\"/assets/plus-docs/offline/desktop-offline-enable-auto-update.png\" alt=\"Screenshot showing MDN Offline page with the auto update toggle highlighted.\">\n </li>\n <li>\n Clicking <strong>Update now</strong> will start the download of the latest version of MDN\n Web Docs.\n <pre>&lt;img src=\"/assets/plus-docs/offline/desktop-offline-manual-update.png\" alt=\"Screenshot showing MDN Offline page with the update now button highlighted.\"&gt;\n</pre>\n </li>\n <li>The date of the last update is also shown.</li>\n</ol>"}},{"type":"prose","value":{"id":"clear_stored_data","title":"Clear stored data","isH3":false,"content":"<p>Open the user menu → MDN Offline → Clear data</p>\n<p>\n <img src=\"/assets/plus-docs/offline/desktop-offline-clear-data.png\" alt=\"Screenshot showing MDN Offline page with the clear data button highlighted.\">\n</p>"}},{"type":"prose","value":{"id":"supported_features","title":"Supported Features","isH3":false,"content":"<p>Some insight into what can be expected from using MDN Offline</p>"}},{"type":"prose","value":{"id":"browsing_content","title":"Browsing Content","isH3":true,"content":"<p>\n If offline mode is enabled, offline content is preferred. All content works\n without an internet connection, with the exception of a few github-based\n examples and large video files. You can also indicate you prefer offline content\n even when online.\n</p>\n<blockquote>\n <p>NOTE: MDN Offline cannot be used while in a private or incognito window.</p>\n</blockquote>"}}],"toc":[{"text":"Getting started","id":"getting_started"},{"text":"Choose how to stay up-to-date","id":"choose_how_to_stay_up-to-date"},{"text":"Clear stored data","id":"clear_stored_data"},{"text":"Supported Features","id":"supported_features"}]},"pageTitle":"MDN Offline | MDN Plus","url":"/en-US/plus/docs/features/offline"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/overview","title":"Feature Overview","sections":["<h1>Overview</h1>\n<blockquote>\n <p>More MDN. Your MDN. <em>Get started</em>.</p>\n <p>This page is an overview of the MDN Plus documentation and related resources.</p>\n</blockquote>\n<p>\n MDN Plus is a premium subscription service launched by Mozilla. The service\n allows users to customize their MDN Web Docs experience through premium features\n such as Collections, filtering Updates and MDN Offline.\n</p>\n<p>\n Learn more about MDN Plus on our <a href=\"/\">website</a> or in this\n <a href=\"https://hacks.mozilla.org/2022/03/introducing-mdn-plus-make-mdn-your-own/\">blogpost</a>.\n</p>"],"toc":[]},"pageTitle":"Feature Overview | MDN Plus","url":"/en-US/plus/docs/features/overview"}
{"hyData":{"id":"features/overview","title":"Feature Overview","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"overview\">Overview</h1>\n<blockquote>\n <p>More MDN. Your MDN. <em>Get started</em>.</p>\n <p>This page is an overview of the MDN Plus documentation and related resources.</p>\n</blockquote>\n<p>\n MDN Plus is a premium subscription service launched by Mozilla. The service\n allows users to customize their MDN Web Docs experience through premium features\n such as Collections, filtering Updates and MDN Offline.\n</p>\n<p>\n Learn more about MDN Plus on our <a href=\"/\">website</a> or in this\n <a href=\"https://hacks.mozilla.org/2022/03/introducing-mdn-plus-make-mdn-your-own/\">blogpost</a>.\n</p>"}}],"toc":[]},"pageTitle":"Feature Overview | MDN Plus","url":"/en-US/plus/docs/features/overview"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/playground","title":"Playground","sections":["<h1>Playground</h1>\n<blockquote>\n <p>Write,Test and <em>Share</em> your code</p>\n</blockquote>","<h2 id=\"what-is-the-playground-\">What is the Playground?</h2>\n<p>\n The Playground is the new web development tool provided by MDN. It serves as a\n platform for web developers to preview and experiment with HTML, CSS, and\n JavaScript code. The Playground offers features like basic autocomplete, code\n formatting using the popular \"prettier\" tool, and the ability to share your work\n with others. By integrating the Playground into our web docs, MDN aims to\n provide an enhanced learning and coding experience for developers.\n</p>","<h2 id=\"key-features\">Key Features</h2>\n<p>The MDN Playground comes packed with several key features, including:</p>\n<p><strong>Preview:</strong> Instantly see the results of your HTML, CSS, and JavaScript code.</p>\n<p>\n <strong>Autocomplete:</strong> Benefit from basic code suggestions and auto-completion to\n speed up your coding process.\n</p>\n<p>\n <strong>Code Formatting:</strong> Utilize the powerful \"prettier\" tool to automatically\n format your code for better readability.\n</p>\n<p>\n <strong>Sharing:</strong> Share your amazing work with others by publishing your code and\n sharing the generated link.\n</p>\n<p>\n <strong>Integration within MDN:</strong> Seamlessly access the Playground within MDN,\n enabling a comprehensive learning experience.\n</p>","<h2 id=\"how-to-access-the-mdn-playground\">How to Access the MDN Playground</h2>\n<p>\n Accessing the MDN Playground is quick and easy. Follow these steps to start\n using the Playground:\n</p>\n<ol>\n <li>\n There are two ways to access the playground: a. directly from the MDN menu by\n clicking on “Play” b. by accessing any MDN documentation page including code\n samples and clicking on the playground icon within the code samples\n \n <img src=\"/assets/plus-docs/playground/playground-menu.png\" alt=\"Screenshot of top menu with play highlighted\">\n <img src=\"/assets/plus-docs/playground/playground-sample.png\" alt=\"Screenshot of a code example with play highlighted\">\n </li>\n <li>Clicking the \"Playground\" button will launch the Playground in a new tab.</li>\n <li>\n Start coding, previewing, and experimenting with HTML, CSS, and JavaScript\n right away!\n \n <img src=\"/assets/plus-docs/playground/playground-example.png\" alt=\"Screenshot of the playground\">\n </li>\n</ol>","<h2 id=\"join-the-community\">Join the Community</h2>\n<p>\n The MDN Playground is not just a tool; it's a community of passionate developers\n eager to learn and collaborate. We encourage you to join the MDN Playground\n community and become part of this vibrant ecosystem. Here's how you can get\n involved:\n</p>\n<p>Sign up for an MDN Plus account if you haven't already.</p>\n<ol>\n <li>\n Participate in discussions, share ideas, and seek help on\n <a href=\"/discord\">Discord</a>.\n </li>\n <li>\n Contribute to the improvement of the Playground by\n <a href=\"https://github.com/mdn/yari/issues/new?template=bug-report.yml\">reporting issues</a>\n or\n <a href=\"https://github.com/mdn/mdn/issues/new?template=content-or-feature-suggestion.yml\">suggesting new features</a>.\n </li>\n <li>\n Showcase your projects, share your knowledge, and inspire others by\n contributing code examples to MDN.\n </li>\n</ol>","<h2 id=\"under-the-hood\">Under the Hood</h2>\n<p>\n Curious about how the Playground works? Visit our blog and read more about the\n technical details, architecture, and design choices we made to build it.\n</p>"],"toc":[{"id":"what-is-the-playground-","text":"What is the Playground?"},{"id":"key-features","text":"Key Features"},{"id":"how-to-access-the-mdn-playground","text":"How to Access the MDN Playground"},{"id":"join-the-community","text":"Join the Community"},{"id":"under-the-hood","text":"Under the Hood"}]},"pageTitle":"Playground | MDN Plus","url":"/en-US/plus/docs/features/playground"}
{"hyData":{"id":"features/playground","title":"Playground","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"playground\">Playground</h1>\n<blockquote>\n <p>Write,Test and <em>Share</em> your code</p>\n</blockquote>"}},{"type":"prose","value":{"id":"what_is_the_playground","title":"What is the Playground?","isH3":false,"content":"<p>\n The Playground is the new web development tool provided by MDN. It serves as a\n platform for web developers to preview and experiment with HTML, CSS, and\n JavaScript code. The Playground offers features like basic autocomplete, code\n formatting using the popular \"prettier\" tool, and the ability to share your work\n with others. By integrating the Playground into our web docs, MDN aims to\n provide an enhanced learning and coding experience for developers.\n</p>"}},{"type":"prose","value":{"id":"key_features","title":"Key Features","isH3":false,"content":"<p>The MDN Playground comes packed with several key features, including:</p>\n<p><strong>Preview:</strong> Instantly see the results of your HTML, CSS, and JavaScript code.</p>\n<p>\n <strong>Autocomplete:</strong> Benefit from basic code suggestions and auto-completion to\n speed up your coding process.\n</p>\n<p>\n <strong>Code Formatting:</strong> Utilize the powerful \"prettier\" tool to automatically\n format your code for better readability.\n</p>\n<p>\n <strong>Sharing:</strong> Share your amazing work with others by publishing your code and\n sharing the generated link.\n</p>\n<p>\n <strong>Integration within MDN:</strong> Seamlessly access the Playground within MDN,\n enabling a comprehensive learning experience.\n</p>"}},{"type":"prose","value":{"id":"how_to_access_the_mdn_playground","title":"How to Access the MDN Playground","isH3":false,"content":"<p>\n Accessing the MDN Playground is quick and easy. Follow these steps to start\n using the Playground:\n</p>\n<ol>\n <li>\n There are two ways to access the playground: a. directly from the MDN menu by\n clicking on “Play” b. by accessing any MDN documentation page including code\n samples and clicking on the playground icon within the code samples\n <pre>&lt;img src=\"/assets/plus-docs/playground/playground-menu.png\" alt=\"Screenshot of top menu with play highlighted\"&gt;\n&lt;img src=\"/assets/plus-docs/playground/playground-sample.png\" alt=\"Screenshot of a code example with play highlighted\"&gt;\n</pre>\n </li>\n <li>Clicking the \"Playground\" button will launch the Playground in a new tab.</li>\n <li>\n Start coding, previewing, and experimenting with HTML, CSS, and JavaScript\n right away!\n <pre>&lt;img src=\"/assets/plus-docs/playground/playground-example.png\" alt=\"Screenshot of the playground\"&gt;\n</pre>\n </li>\n</ol>"}},{"type":"prose","value":{"id":"join_the_community","title":"Join the Community","isH3":false,"content":"<p>\n The MDN Playground is not just a tool; it's a community of passionate developers\n eager to learn and collaborate. We encourage you to join the MDN Playground\n community and become part of this vibrant ecosystem. Here's how you can get\n involved:\n</p>\n<p>Sign up for an MDN Plus account if you haven't already.</p>\n<ol>\n <li>\n Participate in discussions, share ideas, and seek help on\n <a href=\"/discord\">Discord</a>.\n </li>\n <li>\n Contribute to the improvement of the Playground by\n <a href=\"https://github.com/mdn/yari/issues/new?template=bug-report.yml\">reporting issues</a>\n or\n <a href=\"https://github.com/mdn/mdn/issues/new?template=content-or-feature-suggestion.yml\">suggesting new features</a>.\n </li>\n <li>\n Showcase your projects, share your knowledge, and inspire others by\n contributing code examples to MDN.\n </li>\n</ol>"}},{"type":"prose","value":{"id":"under_the_hood","title":"Under the Hood","isH3":false,"content":"<p>\n Curious about how the Playground works? Visit our blog and read more about the\n technical details, architecture, and design choices we made to build it.\n</p>"}}],"toc":[{"text":"What is the Playground?","id":"what_is_the_playground"},{"text":"Key Features","id":"key_features"},{"text":"How to Access the MDN Playground","id":"how_to_access_the_mdn_playground"},{"text":"Join the Community","id":"join_the_community"},{"text":"Under the Hood","id":"under_the_hood"}]},"pageTitle":"Playground | MDN Plus","url":"/en-US/plus/docs/features/playground"}

@@ -1,1 +0,1 @@

{"hyData":{"id":"features/updates","title":"Updates","sections":["<h1>Updates</h1>\n<blockquote>\n <p>Stay <em>up to date</em> with MDN Updates</p>\n <p>\n Whether Web APIs, JavaScript, CSS, HTTP, or HTML, MDN Web Docs reflects the\n ever-changing landscape for features across the most popular browsers and\n devices with detailed documentation and guidance geared towards developers.\n </p>\n</blockquote>\n<p>\n When you're developing for the Web, you need to make sure you're building\n applications with well-supported features to give your users the best\n experience. Choosing new Web features means that you need to keep an eye on\n compatibility changes as vendors frequently add, update, or remove support for\n Web platform technologies.\n</p>\n<p>\n MDN Updates is a feature that helps you navigate and curate Web platform\n technology support via a stream of updates. The results organized in the stream\n of updates show compatibility by feature across fourteen different browser\n engines, from iOS and Android to desktop and server platforms.\n</p>\n<p>\n Features are categorized by technology like CSS, HTML, JavaScript, HTTP, and\n others to let you focus on the technologies that impact your development\n projects.\n</p>\n<p>\n MDN Plus Updates lets you quickly get an overview of new, experimental, and\n upcoming browser support, new sub-features under a major feature, deprecated or\n removed support, and changes to existing browser compatibility data entries.\n</p>","<h2 id=\"using-mdn-plus-updates\">Using MDN Plus Updates</h2>\n<p>\n To use Updates, navigate to the <a href=\"/en-US/plus/updates\">MDN Plus Updates</a> page,\n where you can see a list of all changes in browser support for features on MDN\n Web Docs listed by date.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates.png\" alt=\"Screenshot of default view\">\n</p>\n<p>\n For each feature, updates display the release version and the date when browser\n support changed. Expanding the update shows Browser Compatibility Tables to\n indicate support across all browsers and devices. The feature update includes\n links to MDN Web Docs pages with clear documentation and guidance on how to use\n it.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_bcd.png\" alt=\"Expanded feature screenshot with the table, link to docs, watch and save\">\n</p>","<h2 id=\"filtering-and-searching-web-platform-updates\">Filtering and searching web platform updates</h2>\n<p>\n By default, the list of updates shows all changes grouped by browser release\n version and date. Selecting a browser from the dropdown menu will filter the\n list of changes to only show changes for that browser. You can select a category\n from the dropdown menu to only show changes for that technology category or\n combine that with a browser filter to show only changes for a specific browser\n and technology category.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_filter.png\" alt=\"Filtered screenshot, browser and category\">\n</p>\n<p>\n You can also search for a specific feature by name or keyword to find the\n functionality you're looking for.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_filter.png\" alt=\"Search screenshot&quot;\">\n</p>","<h2 id=\"curating-your-own-collection-of-updates\">Curating your own collection of updates</h2>\n<p>\n Aside from Browser Compatibility Tables and links to the MDN Web Docs pages,\n expanding feature details provides an additional option to <strong>Save</strong> the feature.\n Saving a feature will add it to a curated collection of features you want to\n track. You can create multiple collections to organize and group features that\n matter most for your applications and projects.\n</p>\n<p>\n Saving a feature to a collection allows you to add the feature to a collection\n of saved features. You can create multiple collections to organize and group\n features you want to track.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/collections.png\" alt=\"Screenshot of multiple collections\">\n</p>\n<p>\n To view your collection of saved features, click the <strong>Saved</strong> tab at the top of\n the Updates page.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_collection.png\" alt=\"Screenshot showing the multiple collections on the updates page\">\n</p>\n<p>Visit the <a href=\"/en-US/plus/updates\">MDN Plus Updates</a> page and give us feedback.</p>"],"toc":[{"id":"using-mdn-plus-updates","text":"Using MDN Plus Updates"},{"id":"filtering-and-searching-web-platform-updates","text":"Filtering and searching web platform updates"},{"id":"curating-your-own-collection-of-updates","text":"Curating your own collection of updates"}]},"pageTitle":"Updates | MDN Plus","url":"/en-US/plus/docs/features/updates"}
{"hyData":{"id":"features/updates","title":"Updates","sections":[{"type":"prose","value":{"id":null,"title":null,"isH3":false,"content":"<h1 id=\"updates\">Updates</h1>\n<blockquote>\n <p>Stay <em>up to date</em> with MDN Updates</p>\n <p>\n Whether Web APIs, JavaScript, CSS, HTTP, or HTML, MDN Web Docs reflects the\n ever-changing landscape for features across the most popular browsers and\n devices with detailed documentation and guidance geared towards developers.\n </p>\n</blockquote>\n<p>\n When you're developing for the Web, you need to make sure you're building\n applications with well-supported features to give your users the best\n experience. Choosing new Web features means that you need to keep an eye on\n compatibility changes as vendors frequently add, update, or remove support for\n Web platform technologies.\n</p>\n<p>\n MDN Updates is a feature that helps you navigate and curate Web platform\n technology support via a stream of updates. The results organized in the stream\n of updates show compatibility by feature across fourteen different browser\n engines, from iOS and Android to desktop and server platforms.\n</p>\n<p>\n Features are categorized by technology like CSS, HTML, JavaScript, HTTP, and\n others to let you focus on the technologies that impact your development\n projects.\n</p>\n<p>\n MDN Plus Updates lets you quickly get an overview of new, experimental, and\n upcoming browser support, new sub-features under a major feature, deprecated or\n removed support, and changes to existing browser compatibility data entries.\n</p>"}},{"type":"prose","value":{"id":"using_mdn_plus_updates","title":"Using MDN Plus Updates","isH3":false,"content":"<p>\n To use Updates, navigate to the <a href=\"/en-US/plus/updates\">MDN Plus Updates</a> page,\n where you can see a list of all changes in browser support for features on MDN\n Web Docs listed by date.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates.png\" alt=\"Screenshot of default view\">\n</p>\n<p>\n For each feature, updates display the release version and the date when browser\n support changed. Expanding the update shows Browser Compatibility Tables to\n indicate support across all browsers and devices. The feature update includes\n links to MDN Web Docs pages with clear documentation and guidance on how to use\n it.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_bcd.png\" alt=\"Expanded feature screenshot with the table, link to docs, watch and save\">\n</p>"}},{"type":"prose","value":{"id":"filtering_and_searching_web_platform_updates","title":"Filtering and searching web platform updates","isH3":false,"content":"<p>\n By default, the list of updates shows all changes grouped by browser release\n version and date. Selecting a browser from the dropdown menu will filter the\n list of changes to only show changes for that browser. You can select a category\n from the dropdown menu to only show changes for that technology category or\n combine that with a browser filter to show only changes for a specific browser\n and technology category.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_filter.png\" alt=\"Filtered screenshot, browser and category\">\n</p>\n<p>\n You can also search for a specific feature by name or keyword to find the\n functionality you're looking for.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_filter.png\" alt=\"Search screenshot&quot;\">\n</p>"}},{"type":"prose","value":{"id":"curating_your_own_collection_of_updates","title":"Curating your own collection of updates","isH3":false,"content":"<p>\n Aside from Browser Compatibility Tables and links to the MDN Web Docs pages,\n expanding feature details provides an additional option to <strong>Save</strong> the feature.\n Saving a feature will add it to a curated collection of features you want to\n track. You can create multiple collections to organize and group features that\n matter most for your applications and projects.\n</p>\n<p>\n Saving a feature to a collection allows you to add the feature to a collection\n of saved features. You can create multiple collections to organize and group\n features you want to track.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/collections.png\" alt=\"Screenshot of multiple collections\">\n</p>\n<p>\n To view your collection of saved features, click the <strong>Saved</strong> tab at the top of\n the Updates page.\n</p>\n<p>\n <img src=\"/assets/plus-docs/updates/updates_collection.png\" alt=\"Screenshot showing the multiple collections on the updates page\">\n</p>\n<p>Visit the <a href=\"/en-US/plus/updates\">MDN Plus Updates</a> page and give us feedback.</p>"}}],"toc":[{"text":"Using MDN Plus Updates","id":"using_mdn_plus_updates"},{"text":"Filtering and searching web platform updates","id":"filtering_and_searching_web_platform_updates"},{"text":"Curating your own collection of updates","id":"curating_your_own_collection_of_updates"}]},"pageTitle":"Updates | MDN Plus","url":"/en-US/plus/docs/features/updates"}

@@ -1,1 +0,1 @@

((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).zip={})})(this,(function(e){"use strict";const{Array:t,Object:r,String:n,Number:s,BigInt:a,Math:i,Date:o,Map:l,Set:c,Response:d,URL:u,Error:f,Uint8Array:p,Uint16Array:h,Uint32Array:w,DataView:m,Blob:g,Promise:_,TextEncoder:y,TextDecoder:b,document:x,crypto:S,btoa:z,TransformStream:k,ReadableStream:v,WritableStream:E,CompressionStream:R,DecompressionStream:D,navigator:T,Worker:F}="undefined"!=typeof globalThis?globalThis:this||self,A=15,C=573,W=-2;function N(e){return U(e.map((([e,r])=>new t(e).fill(r,0,e))))}function U(e){return e.reduce(((e,r)=>e.concat(t.isArray(r)?U(r):r)),[])}const I=[0,1,2,3].concat(...N([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function L(){const e=this;function t(e,t){let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}e.build_tree=r=>{const n=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems;let o,l,c,d=-1;for(r.heap_len=0,r.heap_max=C,o=0;a>o;o++)0!==n[2*o]?(r.heap[++r.heap_len]=d=o,r.depth[o]=0):n[2*o+1]=0;for(;2>r.heap_len;)c=r.heap[++r.heap_len]=2>d?++d:0,n[2*c]=1,r.depth[c]=0,r.opt_len--,s&&(r.static_len-=s[2*c+1]);for(e.max_code=d,o=i.floor(r.heap_len/2);o>=1;o--)r.pqdownheap(n,o);c=a;do{o=r.heap[1],r.heap[1]=r.heap[r.heap_len--],r.pqdownheap(n,1),l=r.heap[1],r.heap[--r.heap_max]=o,r.heap[--r.heap_max]=l,n[2*c]=n[2*o]+n[2*l],r.depth[c]=i.max(r.depth[o],r.depth[l])+1,n[2*o+1]=n[2*l+1]=c,r.heap[1]=c++,r.pqdownheap(n,1)}while(r.heap_len>=2);r.heap[--r.heap_max]=r.heap[1],(t=>{const r=e.dyn_tree,n=e.stat_desc.static_tree,s=e.stat_desc.extra_bits,a=e.stat_desc.extra_base,i=e.stat_desc.max_length;let o,l,c,d,u,f,p=0;for(d=0;A>=d;d++)t.bl_count[d]=0;for(r[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;C>o;o++)l=t.heap[o],d=r[2*r[2*l+1]+1]+1,d>i&&(d=i,p++),r[2*l+1]=d,l>e.max_code||(t.bl_count[d]++,u=0,a>l||(u=s[l-a]),f=r[2*l],t.opt_len+=f*(d+u),n&&(t.static_len+=f*(n[2*l+1]+u)));if(0!==p){do{for(d=i-1;0===t.bl_count[d];)d--;t.bl_count[d]--,t.bl_count[d+1]+=2,t.bl_count[i]--,p-=2}while(p>0);for(d=i;0!==d;d--)for(l=t.bl_count[d];0!==l;)c=t.heap[--o],c>e.max_code||(r[2*c+1]!=d&&(t.opt_len+=(d-r[2*c+1])*r[2*c],r[2*c+1]=d),l--)}})(r),((e,r,n)=>{const s=[];let a,i,o,l=0;for(a=1;A>=a;a++)s[a]=l=l+n[a-1]<<1;for(i=0;r>=i;i++)o=e[2*i+1],0!==o&&(e[2*i]=t(s[o]++,o))})(n,e.max_code,r.bl_count)}}function O(e,t,r,n,s){const a=this;a.static_tree=e,a.extra_bits=t,a.extra_base=r,a.elems=n,a.max_length=s}L._length_code=[0,1,2,3,4,5,6,7].concat(...N([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),L.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],L.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],L.d_code=e=>256>e?I[e]:I[256+(e>>>7)],L.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],L.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],L.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],L.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const H=N([[144,8],[112,9],[24,7],[8,8]]);O.static_ltree=U([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((e,t)=>[e,H[t]])));const M=N([[30,5]]);function q(e,t,r,n,s){const a=this;a.good_length=e,a.max_lazy=t,a.nice_length=r,a.max_chain=n,a.func=s}O.static_dtree=U([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((e,t)=>[e,M[t]]))),O.static_l_desc=new O(O.static_ltree,L.extra_lbits,257,286,A),O.static_d_desc=new O(O.static_dtree,L.extra_dbits,0,30,A),O.static_bl_desc=new O(null,L.extra_blbits,0,19,7);const P=[new q(0,0,0,0,0),new q(4,4,8,4,1),new q(4,5,16,8,1),new q(4,6,32,32,1),new q(4,4,16,16,2),new q(8,16,32,32,2),new q(8,16,128,128,2),new q(8,32,128,256,2),new q(32,128,258,1024,2),new q(32,258,258,4096,2)],B=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],V=113,Z=666,K=262;function j(e,t,r,n){const s=e[2*t],a=e[2*r];return a>s||s==a&&n[t]<=n[r]}function X(){const e=this;let t,r,n,s,a,o,l,c,d,u,f,w,m,g,_,y,b,x,S,z,k,v,E,R,D,T,F,A,C,N,U,I,H;const M=new L,q=new L,X=new L;let Y,G,J,Q,$,ee;function te(){let t;for(t=0;286>t;t++)U[2*t]=0;for(t=0;30>t;t++)I[2*t]=0;for(t=0;19>t;t++)H[2*t]=0;U[512]=1,e.opt_len=e.static_len=0,G=J=0}function re(e,t){let r,n=-1,s=e[1],a=0,i=7,o=4;0===s&&(i=138,o=3),e[2*(t+1)+1]=65535;for(let l=0;t>=l;l++)r=s,s=e[2*(l+1)+1],++a<i&&r==s||(o>a?H[2*r]+=a:0!==r?(r!=n&&H[2*r]++,H[32]++):a>10?H[36]++:H[34]++,a=0,n=r,0===s?(i=138,o=3):r==s?(i=6,o=3):(i=7,o=4))}function ne(t){e.pending_buf[e.pending++]=t}function se(e){ne(255&e),ne(e>>>8&255)}function ae(e,t){let r;const n=t;ee>16-n?(r=e,$|=r<<ee&65535,se($),$=r>>>16-ee,ee+=n-16):($|=e<<ee&65535,ee+=n)}function ie(e,t){const r=2*e;ae(65535&t[r],65535&t[r+1])}function oe(e,t){let r,n,s=-1,a=e[1],i=0,o=7,l=4;for(0===a&&(o=138,l=3),r=0;t>=r;r++)if(n=a,a=e[2*(r+1)+1],++i>=o||n!=a){if(l>i)do{ie(n,H)}while(0!=--i);else 0!==n?(n!=s&&(ie(n,H),i--),ie(16,H),ae(i-3,2)):i>10?(ie(18,H),ae(i-11,7)):(ie(17,H),ae(i-3,3));i=0,s=n,0===a?(o=138,l=3):n==a?(o=6,l=3):(o=7,l=4)}}function le(){16==ee?(se($),$=0,ee=0):8>ee||(ne(255&$),$>>>=8,ee-=8)}function ce(t,r){let n,s,a;if(e.dist_buf[G]=t,e.lc_buf[G]=255&r,G++,0===t?U[2*r]++:(J++,t--,U[2*(L._length_code[r]+256+1)]++,I[2*L.d_code(t)]++),!(8191&G)&&F>2){for(n=8*G,s=k-b,a=0;30>a;a++)n+=I[2*a]*(5+L.extra_dbits[a]);if(n>>>=3,J<i.floor(G/2)&&n<i.floor(s/2))return!0}return G==Y-1}function de(t,r){let n,s,a,i,o=0;if(0!==G)do{n=e.dist_buf[o],s=e.lc_buf[o],o++,0===n?ie(s,t):(a=L._length_code[s],ie(a+256+1,t),i=L.extra_lbits[a],0!==i&&(s-=L.base_length[a],ae(s,i)),n--,a=L.d_code(n),ie(a,r),i=L.extra_dbits[a],0!==i&&(n-=L.base_dist[a],ae(n,i)))}while(G>o);ie(256,t),Q=t[513]}function ue(){ee>8?se($):ee>0&&ne(255&$),$=0,ee=0}function fe(t,r,n){ae(0+(n?1:0),3),((t,r)=>{ue(),Q=8,se(r),se(~r),e.pending_buf.set(c.subarray(t,t+r),e.pending),e.pending+=r})(t,r)}function pe(r){((t,r,n)=>{let s,a,i=0;F>0?(M.build_tree(e),q.build_tree(e),i=(()=>{let t;for(re(U,M.max_code),re(I,q.max_code),X.build_tree(e),t=18;t>=3&&0===H[2*L.bl_order[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(),s=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a>s||(s=a)):s=a=r+5,r+4>s||-1==t?a==s?(ae(2+(n?1:0),3),de(O.static_ltree,O.static_dtree)):(ae(4+(n?1:0),3),((e,t,r)=>{let n;for(ae(e-257,5),ae(t-1,5),ae(r-4,4),n=0;r>n;n++)ae(H[2*L.bl_order[n]+1],3);oe(U,e-1),oe(I,t-1)})(M.max_code+1,q.max_code+1,i+1),de(U,I)):fe(t,r,n),te(),n&&ue()})(0>b?-1:b,k-b,r),b=k,t.flush_pending()}function he(){let e,r,n,s;do{if(s=d-E-k,0===s&&0===k&&0===E)s=a;else if(-1==s)s--;else if(k>=a+a-K){c.set(c.subarray(a,a+a),0),v-=a,k-=a,b-=a,e=m,n=e;do{r=65535&f[--n],f[n]=a>r?0:r-a}while(0!=--e);e=a,n=e;do{r=65535&u[--n],u[n]=a>r?0:r-a}while(0!=--e);s+=a}if(0===t.avail_in)return;e=t.read_buf(c,k+E,s),E+=e,3>E||(w=255&c[k],w=(w<<y^255&c[k+1])&_)}while(K>E&&0!==t.avail_in)}function we(e){let t,r,n=D,s=k,i=R;const o=k>a-K?k-(a-K):0;let d=N;const f=l,p=k+258;let h=c[s+i-1],w=c[s+i];C>R||(n>>=2),d>E&&(d=E);do{if(t=e,c[t+i]==w&&c[t+i-1]==h&&c[t]==c[s]&&c[++t]==c[s+1]){s+=2,t++;do{}while(c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&p>s);if(r=258-(p-s),s=p-258,r>i){if(v=e,i=r,r>=d)break;h=c[s+i-1],w=c[s+i]}}}while((e=65535&u[e&f])>o&&0!=--n);return i>E?E:i}e.depth=[],e.bl_count=[],e.heap=[],U=[],I=[],H=[],e.pqdownheap=(t,r)=>{const n=e.heap,s=n[r];let a=r<<1;for(;a<=e.heap_len&&(a<e.heap_len&&j(t,n[a+1],n[a],e.depth)&&a++,!j(t,s,n[a],e.depth));)n[r]=n[a],r=a,a<<=1;n[r]=s},e.deflateInit=(t,S,v,L,B,Z)=>(L||(L=8),B||(B=8),Z||(Z=0),t.msg=null,-1==S&&(S=6),1>B||B>9||8!=L||9>v||v>15||0>S||S>9||0>Z||Z>2?W:(t.dstate=e,o=v,a=1<<o,l=a-1,g=B+7,m=1<<g,_=m-1,y=i.floor((g+3-1)/3),c=new p(2*a),u=[],f=[],Y=1<<B+6,e.pending_buf=new p(4*Y),n=4*Y,e.dist_buf=new h(Y),e.lc_buf=new p(Y),F=S,A=Z,(t=>(t.total_in=t.total_out=0,t.msg=null,e.pending=0,e.pending_out=0,r=V,s=0,M.dyn_tree=U,M.stat_desc=O.static_l_desc,q.dyn_tree=I,q.stat_desc=O.static_d_desc,X.dyn_tree=H,X.stat_desc=O.static_bl_desc,$=0,ee=0,Q=8,te(),(()=>{d=2*a,f[m-1]=0;for(let e=0;m-1>e;e++)f[e]=0;T=P[F].max_lazy,C=P[F].good_length,N=P[F].nice_length,D=P[F].max_chain,k=0,b=0,E=0,x=R=2,z=0,w=0})(),0))(t))),e.deflateEnd=()=>42!=r&&r!=V&&r!=Z?W:(e.lc_buf=null,e.dist_buf=null,e.pending_buf=null,f=null,u=null,c=null,e.dstate=null,r==V?-3:0),e.deflateParams=(e,t,r)=>{let n=0;return-1==t&&(t=6),0>t||t>9||0>r||r>2?W:(P[F].func!=P[t].func&&0!==e.total_in&&(n=e.deflate(1)),F!=t&&(F=t,T=P[F].max_lazy,C=P[F].good_length,N=P[F].nice_length,D=P[F].max_chain),A=r,n)},e.deflateSetDictionary=(e,t,n)=>{let s,i=n,o=0;if(!t||42!=r)return W;if(3>i)return 0;for(i>a-K&&(i=a-K,o=n-i),c.set(t.subarray(o,o+i),0),k=i,b=i,w=255&c[0],w=(w<<y^255&c[1])&_,s=0;i-3>=s;s++)w=(w<<y^255&c[s+2])&_,u[s&l]=f[w],f[w]=s;return 0},e.deflate=(i,d)=>{let p,h,g,D,C;if(d>4||0>d)return W;if(!i.next_out||!i.next_in&&0!==i.avail_in||r==Z&&4!=d)return i.msg=B[4],W;if(0===i.avail_out)return i.msg=B[7],-5;var N;if(t=i,D=s,s=d,42==r&&(h=8+(o-8<<4)<<8,g=(F-1&255)>>1,g>3&&(g=3),h|=g<<6,0!==k&&(h|=32),h+=31-h%31,r=V,ne((N=h)>>8&255),ne(255&N)),0!==e.pending){if(t.flush_pending(),0===t.avail_out)return s=-1,0}else if(0===t.avail_in&&D>=d&&4!=d)return t.msg=B[7],-5;if(r==Z&&0!==t.avail_in)return i.msg=B[7],-5;if(0!==t.avail_in||0!==E||0!=d&&r!=Z){switch(C=-1,P[F].func){case 0:C=(e=>{let r,s=65535;for(s>n-5&&(s=n-5);;){if(1>=E){if(he(),0===E&&0==e)return 0;if(0===E)break}if(k+=E,E=0,r=b+s,(0===k||k>=r)&&(E=k-r,k=r,pe(!1),0===t.avail_out))return 0;if(k-b>=a-K&&(pe(!1),0===t.avail_out))return 0}return pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d);break;case 1:C=(e=>{let r,n=0;for(;;){if(K>E){if(he(),K>E&&0==e)return 0;if(0===E)break}if(3>E||(w=(w<<y^255&c[k+2])&_,n=65535&f[w],u[k&l]=f[w],f[w]=k),0===n||(k-n&65535)>a-K||2!=A&&(x=we(n)),3>x)r=ce(0,255&c[k]),E--,k++;else if(r=ce(k-v,x-3),E-=x,x>T||3>E)k+=x,x=0,w=255&c[k],w=(w<<y^255&c[k+1])&_;else{x--;do{k++,w=(w<<y^255&c[k+2])&_,n=65535&f[w],u[k&l]=f[w],f[w]=k}while(0!=--x);k++}if(r&&(pe(!1),0===t.avail_out))return 0}return pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d);break;case 2:C=(e=>{let r,n,s=0;for(;;){if(K>E){if(he(),K>E&&0==e)return 0;if(0===E)break}if(3>E||(w=(w<<y^255&c[k+2])&_,s=65535&f[w],u[k&l]=f[w],f[w]=k),R=x,S=v,x=2,0!==s&&T>R&&a-K>=(k-s&65535)&&(2!=A&&(x=we(s)),5>=x&&(1==A||3==x&&k-v>4096)&&(x=2)),3>R||x>R)if(0!==z){if(r=ce(0,255&c[k-1]),r&&pe(!1),k++,E--,0===t.avail_out)return 0}else z=1,k++,E--;else{n=k+E-3,r=ce(k-1-S,R-3),E-=R-1,R-=2;do{++k>n||(w=(w<<y^255&c[k+2])&_,s=65535&f[w],u[k&l]=f[w],f[w]=k)}while(0!=--R);if(z=0,x=2,k++,r&&(pe(!1),0===t.avail_out))return 0}}return 0!==z&&(r=ce(0,255&c[k-1]),z=0),pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d)}if(2!=C&&3!=C||(r=Z),0==C||2==C)return 0===t.avail_out&&(s=-1),0;if(1==C){if(1==d)ae(2,3),ie(256,O.static_ltree),le(),9>1+Q+10-ee&&(ae(2,3),ie(256,O.static_ltree),le()),Q=7;else if(fe(0,0,!1),3==d)for(p=0;m>p;p++)f[p]=0;if(t.flush_pending(),0===t.avail_out)return s=-1,0}}return 4!=d?0:1}}function Y(){const e=this;e.next_in_index=0,e.next_out_index=0,e.avail_in=0,e.total_in=0,e.avail_out=0,e.total_out=0}Y.prototype={deflateInit(e,t){const r=this;return r.dstate=new X,t||(t=A),r.dstate.deflateInit(r,e,t)},deflate(e){const t=this;return t.dstate?t.dstate.deflate(t,e):W},deflateEnd(){const e=this;if(!e.dstate)return W;const t=e.dstate.deflateEnd();return e.dstate=null,t},deflateParams(e,t){const r=this;return r.dstate?r.dstate.deflateParams(r,e,t):W},deflateSetDictionary(e,t){const r=this;return r.dstate?r.dstate.deflateSetDictionary(r,e,t):W},read_buf(e,t,r){const n=this;let s=n.avail_in;return s>r&&(s=r),0===s?0:(n.avail_in-=s,e.set(n.next_in.subarray(n.next_in_index,n.next_in_index+s),t),n.next_in_index+=s,n.total_in+=s,s)},flush_pending(){const e=this;let t=e.dstate.pending;t>e.avail_out&&(t=e.avail_out),0!==t&&(e.next_out.set(e.dstate.pending_buf.subarray(e.dstate.pending_out,e.dstate.pending_out+t),e.next_out_index),e.next_out_index+=t,e.dstate.pending_out+=t,e.total_out+=t,e.avail_out-=t,e.dstate.pending-=t,0===e.dstate.pending&&(e.dstate.pending_out=0))}};const G=4294967295,J=65535,Q=134695760,$=Q,ee=new o(2107,11,31),te=new o(1980,0,1),re=void 0,ne="undefined",se="function";class ae{constructor(e){return class extends k{constructor(t,r){const n=new e(r);super({transform(e,t){t.enqueue(n.append(e))},flush(e){const t=n.flush();t&&e.enqueue(t)}})}}}}let ie=2;try{typeof T!=ne&&T.hardwareConcurrency&&(ie=T.hardwareConcurrency)}catch(e){}const oe={chunkSize:524288,maxWorkers:ie,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:re,CompressionStreamNative:typeof R!=ne&&R,DecompressionStreamNative:typeof D!=ne&&D},le=r.assign({},oe);function ce(){return le}function de(e){const{baseURL:r,chunkSize:n,maxWorkers:s,terminateWorkerTimeout:a,useCompressionStream:i,useWebWorkers:o,Deflate:l,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:p}=e;if(ue("baseURL",r),ue("chunkSize",n),ue("maxWorkers",s),ue("terminateWorkerTimeout",a),ue("useCompressionStream",i),ue("useWebWorkers",o),l&&(le.CompressionStream=new ae(l)),c&&(le.DecompressionStream=new ae(c)),ue("CompressionStream",d),ue("DecompressionStream",u),p!==re){const{deflate:e,inflate:r}=p;if((e||r)&&(le.workerScripts||(le.workerScripts={})),e){if(!t.isArray(e))throw new f("workerScripts.deflate must be an array");le.workerScripts.deflate=e}if(r){if(!t.isArray(r))throw new f("workerScripts.inflate must be an array");le.workerScripts.inflate=r}}}function ue(e,t){t!==re&&(le[e]=t)}const fe=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;fe[e]=t}class pe{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let r=0,n=0|e.length;n>r;r++)t=t>>>8^fe[255&(t^e[r])];this.crc=t}get(){return~this.crc}}class he extends k{constructor(){let e;const t=new pe;super({transform(e,r){t.append(e),r.enqueue(e)},flush(){const r=new p(4);new m(r.buffer).setUint32(0,t.get()),e.value=r}}),e=this}}function we(e){if(typeof y==ne){const t=new p((e=unescape(encodeURIComponent(e))).length);for(let r=0;r<t.length;r++)t[r]=e.charCodeAt(r);return t}return(new y).encode(e)}const me={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const r=e[e.length-1],n=me.getPartial(r);return 32===n?e.concat(t):me._shiftRight(t,n,0|r,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const r=e[t-1];return 32*(t-1)+me.getPartial(r)},clamp(e,t){if(32*e.length<t)return e;const r=(e=e.slice(0,i.ceil(t/32))).length;return t&=31,r>0&&t&&(e[r-1]=me.partial(t,e[r-1]&2147483648>>t-1,1)),e},partial:(e,t,r)=>32===e?t:(r?0|t:t<<32-e)+1099511627776*e,getPartial:e=>i.round(e/1099511627776)||32,_shiftRight(e,t,r,n){for(void 0===n&&(n=[]);t>=32;t-=32)n.push(r),r=0;if(0===t)return n.concat(e);for(let s=0;s<e.length;s++)n.push(r|e[s]>>>t),r=e[s]<<32-t;const s=e.length?e[e.length-1]:0,a=me.getPartial(s);return n.push(me.partial(t+a&31,t+a>32?r:n.pop(),1)),n}},ge={bytes:{fromBits(e){const t=me.bitLength(e)/8,r=new p(t);let n;for(let s=0;t>s;s++)3&s||(n=e[s/4]),r[s]=n>>>24,n<<=8;return r},toBits(e){const t=[];let r,n=0;for(r=0;r<e.length;r++)n=n<<8|e[r],3&~r||(t.push(n),n=0);return 3&r&&t.push(me.partial(8*(3&r),n)),t}}},_e=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=ge.utf8String.toBits(e));const r=t._buffer=me.concat(t._buffer,e),n=t._length,s=t._length=n+me.bitLength(e);if(s>9007199254740991)throw new f("Cannot hash more than 2^53 - 1 bits");const a=new w(r);let i=0;for(let e=t.blockSize+n-(t.blockSize+n&t.blockSize-1);s>=e;e+=t.blockSize)t._block(a.subarray(16*i,16*(i+1))),i+=1;return r.splice(0,16*i),t}finalize(){const e=this;let t=e._buffer;const r=e._h;t=me.concat(t,[me.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(i.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),r}_f(e,t,r,n){return e>19?e>39?e>59?e>79?void 0:t^r^n:t&r|t&n|r&n:t^r^n:t&r|~t&n}_S(e,t){return t<<e|t>>>32-e}_block(e){const r=this,n=r._h,s=t(80);for(let t=0;16>t;t++)s[t]=e[t];let a=n[0],o=n[1],l=n[2],c=n[3],d=n[4];for(let e=0;79>=e;e++){16>e||(s[e]=r._S(1,s[e-3]^s[e-8]^s[e-14]^s[e-16]));const t=r._S(5,a)+r._f(e,o,l,c)+d+s[e]+r._key[i.floor(e/20)]|0;d=c,c=l,l=r._S(30,o),o=a,a=t}n[0]=n[0]+a|0,n[1]=n[1]+o|0,n[2]=n[2]+l|0,n[3]=n[3]+c|0,n[4]=n[4]+d|0}},ye={getRandomValues(e){const t=new w(e.buffer),r=e=>{let t=987654321;const r=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&r,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&r)&r)/4294967296+.5)*(i.random()>.5?1:-1))};for(let n,s=0;s<e.length;s+=4){const e=r(4294967296*(n||i.random()));n=987654071*e(),t[s/4]=4294967296*e()|0}return e}},be={importKey:e=>new be.hmacSha1(ge.bytes.toBits(e)),pbkdf2(e,t,r,n){if(r=r||1e4,0>n||0>r)throw new f("invalid params to pbkdf2");const s=1+(n>>5)<<2;let a,i,o,l,c;const d=new ArrayBuffer(s),u=new m(d);let p=0;const h=me;for(t=ge.bytes.toBits(t),c=1;(s||1)>p;c++){for(a=i=e.encrypt(h.concat(t,[c])),o=1;r>o;o++)for(i=e.encrypt(i),l=0;l<i.length;l++)a[l]^=i[l];for(o=0;(s||1)>p&&o<a.length;o++)u.setInt32(p,a[o]),p+=4}return d.slice(0,n/8)},hmacSha1:class{constructor(e){const t=this,r=t._hash=_e,n=[[],[]];t._baseHash=[new r,new r];const s=t._baseHash[0].blockSize/32;e.length>s&&(e=(new r).update(e).finalize());for(let t=0;s>t;t++)n[0][t]=909522486^e[t],n[1][t]=1549556828^e[t];t._baseHash[0].update(n[0]),t._baseHash[1].update(n[1]),t._resultHash=new r(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),r=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),r}encrypt(e){if(this._updated)throw new f("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},xe=typeof S!=ne&&typeof S.getRandomValues==se,Se="Invalid password",ze="Invalid signature",ke="zipjs-abort-check-password";function ve(e){return xe?S.getRandomValues(e):ye.getRandomValues(e)}const Ee=16,Re={name:"PBKDF2"},De=r.assign({hash:{name:"HMAC"}},Re),Te=r.assign({iterations:1e3,hash:{name:"SHA-1"}},Re),Fe=["deriveBits"],Ae=[8,12,16],Ce=[16,24,32],We=10,Ne=[0,0,0,0],Ue=typeof S!=ne,Ie=Ue&&S.subtle,Le=Ue&&typeof Ie!=ne,Oe=ge.bytes,He=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const r=t._tables[0][4],n=t._tables[1],s=e.length;let a,i,o,l=1;if(4!==s&&6!==s&&8!==s)throw new f("invalid aes key size");for(t._key=[i=e.slice(0),o=[]],a=s;4*s+28>a;a++){let e=i[a-1];(a%s==0||8===s&&a%s==4)&&(e=r[e>>>24]<<24^r[e>>16&255]<<16^r[e>>8&255]<<8^r[255&e],a%s==0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),i[a]=i[a-s]^e}for(let e=0;a;e++,a--){const t=i[3&e?a:a-4];o[e]=4>=a||4>e?t:n[0][r[t>>>24]]^n[1][r[t>>16&255]]^n[2][r[t>>8&255]]^n[3][r[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],r=e[4],n=t[4],s=[],a=[];let i,o,l,c;for(let e=0;256>e;e++)a[(s[e]=e<<1^283*(e>>7))^e]=e;for(let d=i=0;!r[d];d^=o||1,i=a[i]||1){let a=i^i<<1^i<<2^i<<3^i<<4;a=a>>8^255&a^99,r[d]=a,n[a]=d,c=s[l=s[o=s[d]]];let u=16843009*c^65537*l^257*o^16843008*d,f=257*s[a]^16843008*a;for(let r=0;4>r;r++)e[r][d]=f=f<<24^f>>>8,t[r][a]=u=u<<24^u>>>8}for(let r=0;5>r;r++)e[r]=e[r].slice(0),t[r]=t[r].slice(0)}_crypt(e,t){if(4!==e.length)throw new f("invalid aes block size");const r=this._key[t],n=r.length/4-2,s=[0,0,0,0],a=this._tables[t],i=a[0],o=a[1],l=a[2],c=a[3],d=a[4];let u,p,h,w=e[0]^r[0],m=e[t?3:1]^r[1],g=e[2]^r[2],_=e[t?1:3]^r[3],y=4;for(let e=0;n>e;e++)u=i[w>>>24]^o[m>>16&255]^l[g>>8&255]^c[255&_]^r[y],p=i[m>>>24]^o[g>>16&255]^l[_>>8&255]^c[255&w]^r[y+1],h=i[g>>>24]^o[_>>16&255]^l[w>>8&255]^c[255&m]^r[y+2],_=i[_>>>24]^o[w>>16&255]^l[m>>8&255]^c[255&g]^r[y+3],y+=4,w=u,m=p,g=h;for(let e=0;4>e;e++)s[t?3&-e:e]=d[w>>>24]<<24^d[m>>16&255]<<16^d[g>>8&255]<<8^d[255&_]^r[y++],u=w,w=m,m=g,g=_,_=u;return s}},Me=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,r=e>>8&255,n=255&e;255===t?(t=0,255===r?(r=0,255===n?n=0:++n):++r):++t,e=0,e+=t<<16,e+=r<<8,e+=n}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,r){let n;if(!(n=t.length))return[];const s=me.bitLength(t);for(let s=0;n>s;s+=4){this.incCounter(r);const n=e.encrypt(r);t[s]^=n[0],t[s+1]^=n[1],t[s+2]^=n[2],t[s+3]^=n[3]}return me.clamp(t,s)}},qe=be.hmacSha1;let Pe=Ue&&Le&&typeof Ie.importKey==se,Be=Ue&&Le&&typeof Ie.deriveBits==se;class Ve extends k{constructor({password:e,rawPassword:t,signed:n,encryptionStrength:s,checkPasswordOnly:a}){super({start(){r.assign(this,{ready:new _((e=>this.resolveReady=e)),password:Xe(e,t),signed:n,strength:s-1,pending:new p})},async transform(e,t){const r=this,{password:n,strength:s,resolveReady:i,ready:o}=r;n?(await(async(e,t,r,n)=>{const s=await je(e,t,r,Ge(n,0,Ae[t])),a=Ge(n,Ae[t]);if(s[0]!=a[0]||s[1]!=a[1])throw new f(Se)})(r,s,n,Ge(e,0,Ae[s]+2)),e=Ge(e,Ae[s]+2),a?t.error(new f(ke)):i()):await o;const l=new p(e.length-We-(e.length-We)%Ee);t.enqueue(Ke(r,e,l,0,We,!0))},async flush(e){const{signed:t,ctr:r,hmac:n,pending:s,ready:a}=this;if(n&&r){await a;const i=Ge(s,0,s.length-We),o=Ge(s,s.length-We);let l=new p;if(i.length){const e=Qe(Oe,i);n.update(e);const t=r.update(e);l=Je(Oe,t)}if(t){const e=Ge(Je(Oe,n.digest()),0,We);for(let t=0;We>t;t++)if(e[t]!=o[t])throw new f(ze)}e.enqueue(l)}}})}}class Ze extends k{constructor({password:e,rawPassword:t,encryptionStrength:n}){let s;super({start(){r.assign(this,{ready:new _((e=>this.resolveReady=e)),password:Xe(e,t),strength:n-1,pending:new p})},async transform(e,t){const r=this,{password:n,strength:s,resolveReady:a,ready:i}=r;let o=new p;n?(o=await(async(e,t,r)=>{const n=ve(new p(Ae[t]));return Ye(n,await je(e,t,r,n))})(r,s,n),a()):await i;const l=new p(o.length+e.length-e.length%Ee);l.set(o,0),t.enqueue(Ke(r,e,l,o.length,0))},async flush(e){const{ctr:t,hmac:r,pending:n,ready:a}=this;if(r&&t){await a;let i=new p;if(n.length){const e=t.update(Qe(Oe,n));r.update(e),i=Je(Oe,e)}s.signature=Je(Oe,r.digest()).slice(0,We),e.enqueue(Ye(i,s.signature))}}}),s=this}}function Ke(e,t,r,n,s,a){const{ctr:i,hmac:o,pending:l}=e,c=t.length-s;let d;for(l.length&&(t=Ye(l,t),r=((e,t)=>{if(t&&t>e.length){const r=e;(e=new p(t)).set(r,0)}return e})(r,c-c%Ee)),d=0;c-Ee>=d;d+=Ee){const e=Qe(Oe,Ge(t,d,d+Ee));a&&o.update(e);const s=i.update(e);a||o.update(s),r.set(Je(Oe,s),d+n)}return e.pending=Ge(t,d),r}async function je(e,n,s,a){e.password=null;const i=await(async(e,t,r,n,s)=>{if(!Pe)return be.importKey(t);try{return await Ie.importKey("raw",t,r,!1,s)}catch(e){return Pe=!1,be.importKey(t)}})(0,s,De,0,Fe),o=await(async(e,t,r)=>{if(!Be)return be.pbkdf2(t,e.salt,Te.iterations,r);try{return await Ie.deriveBits(e,t,r)}catch(n){return Be=!1,be.pbkdf2(t,e.salt,Te.iterations,r)}})(r.assign({salt:a},Te),i,8*(2*Ce[n]+2)),l=new p(o),c=Qe(Oe,Ge(l,0,Ce[n])),d=Qe(Oe,Ge(l,Ce[n],2*Ce[n])),u=Ge(l,2*Ce[n]);return r.assign(e,{keys:{key:c,authentication:d,passwordVerification:u},ctr:new Me(new He(c),t.from(Ne)),hmac:new qe(d)}),u}function Xe(e,t){return t===re?we(e):t}function Ye(e,t){let r=e;return e.length+t.length&&(r=new p(e.length+t.length),r.set(e,0),r.set(t,e.length)),r}function Ge(e,t,r){return e.subarray(t,r)}function Je(e,t){return e.fromBits(t)}function Qe(e,t){return e.toBits(t)}class $e extends k{constructor({password:e,passwordVerification:t,checkPasswordOnly:n}){super({start(){r.assign(this,{password:e,passwordVerification:t}),nt(this,e)},transform(e,t){const r=this;if(r.password){const t=tt(r,e.subarray(0,12));if(r.password=null,t[11]!=r.passwordVerification)throw new f(Se);e=e.subarray(12)}n?t.error(new f(ke)):t.enqueue(tt(r,e))}})}}class et extends k{constructor({password:e,passwordVerification:t}){super({start(){r.assign(this,{password:e,passwordVerification:t}),nt(this,e)},transform(e,t){const r=this;let n,s;if(r.password){r.password=null;const t=ve(new p(12));t[11]=r.passwordVerification,n=new p(e.length+t.length),n.set(rt(r,t),0),s=12}else n=new p(e.length),s=0;n.set(rt(r,e),s),t.enqueue(n)}})}}function tt(e,t){const r=new p(t.length);for(let n=0;n<t.length;n++)r[n]=at(e)^t[n],st(e,r[n]);return r}function rt(e,t){const r=new p(t.length);for(let n=0;n<t.length;n++)r[n]=at(e)^t[n],st(e,t[n]);return r}function nt(e,t){const n=[305419896,591751049,878082192];r.assign(e,{keys:n,crcKey0:new pe(n[0]),crcKey2:new pe(n[2])});for(let r=0;r<t.length;r++)st(e,t.charCodeAt(r))}function st(e,t){let[r,n,s]=e.keys;e.crcKey0.append([t]),r=~e.crcKey0.get(),n=ot(i.imul(ot(n+it(r)),134775813)+1),e.crcKey2.append([n>>>24]),s=~e.crcKey2.get(),e.keys=[r,n,s]}function at(e){const t=2|e.keys[2];return it(i.imul(t,1^t)>>>8)}function it(e){return 255&e}function ot(e){return 4294967295&e}const lt="deflate-raw";class ct extends k{constructor(e,{chunkSize:t,CompressionStream:r,CompressionStreamNative:n}){super({});const{compressed:s,encrypted:a,useCompressionStream:i,zipCrypto:o,signed:l,level:c}=e,d=this;let u,f,p=ut(super.readable);a&&!o||!l||(u=new he,p=ht(p,u)),s&&(p=pt(p,i,{level:c,chunkSize:t},n,r)),a&&(o?p=ht(p,new et(e)):(f=new Ze(e),p=ht(p,f))),ft(d,p,(()=>{let e;a&&!o&&(e=f.signature),a&&!o||!l||(e=new m(u.value.buffer).getUint32(0)),d.signature=e}))}}class dt extends k{constructor(e,{chunkSize:t,DecompressionStream:r,DecompressionStreamNative:n}){super({});const{zipCrypto:s,encrypted:a,signed:i,signature:o,compressed:l,useCompressionStream:c}=e;let d,u,p=ut(super.readable);a&&(s?p=ht(p,new $e(e)):(u=new Ve(e),p=ht(p,u))),l&&(p=pt(p,c,{chunkSize:t},n,r)),a&&!s||!i||(d=new he,p=ht(p,d)),ft(this,p,(()=>{if((!a||s)&&i){const e=new m(d.value.buffer);if(o!=e.getUint32(0,!1))throw new f(ze)}}))}}function ut(e){return ht(e,new k({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ft(e,t,n){t=ht(t,new k({flush:n})),r.defineProperty(e,"readable",{get:()=>t})}function pt(e,t,r,n,s){try{e=ht(e,new(t&&n?n:s)(lt,r))}catch(n){if(!t)return e;try{e=ht(e,new s(lt,r))}catch(t){return e}}return e}function ht(e,t){return e.pipeThrough(t)}const wt="data",mt="close",gt="deflate";class _t extends k{constructor(e,t){super({});const n=this,{codecType:s}=e;let a;s.startsWith(gt)?a=ct:s.startsWith("inflate")&&(a=dt);let i=0,o=0;const l=new a(e,t),c=super.readable,d=new k({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){r.assign(n,{inputSize:o})}}),u=new k({transform(e,t){e&&e.length&&(i+=e.length,t.enqueue(e))},flush(){const{signature:e}=l;r.assign(n,{signature:e,outputSize:i,inputSize:o})}});r.defineProperty(n,"readable",{get:()=>c.pipeThrough(d).pipeThrough(l).pipeThrough(u)})}}class yt extends k{constructor(e){let t;super({transform:function r(n,s){if(t){const e=new p(t.length+n.length);e.set(t),e.set(n,t.length),n=e,t=null}n.length>e?(s.enqueue(n.slice(0,e)),r(n.slice(e),s)):t=n},flush(e){t&&t.length&&e.enqueue(t)}})}}let bt=typeof F!=ne;class xt{constructor(e,{readable:t,writable:n},{options:s,config:a,streamOptions:i,useWebWorkers:o,transferStreams:l,scripts:c},d){const{signal:u}=i;return r.assign(e,{busy:!0,readable:t.pipeThrough(new yt(a.chunkSize)).pipeThrough(new St(t,i),{signal:u}),writable:n,options:r.assign({},s),scripts:c,transferStreams:l,terminate:()=>new _((t=>{const{worker:r,busy:n}=e;r?(n?e.resolveTerminated=t:(r.terminate(),t()),e.interface=null):t()})),onTaskFinished(){const{resolveTerminated:t}=e;t&&(e.resolveTerminated=null,e.terminated=!0,e.worker.terminate(),t()),e.busy=!1,d(e)}}),(o&&bt?vt:kt)(e,a)}}class St extends k{constructor(e,{onstart:t,onprogress:r,size:n,onend:s}){let a=0;super({async start(){t&&await zt(t,n)},async transform(e,t){a+=e.length,r&&await zt(r,a,n),t.enqueue(e)},async flush(){e.size=a,s&&await zt(s,a)}})}}async function zt(e,...t){try{await e(...t)}catch(e){}}function kt(e,t){return{run:()=>(async({options:e,readable:t,writable:r,onTaskFinished:n},s)=>{try{const n=new _t(e,s);await t.pipeThrough(n).pipeTo(r,{preventClose:!0,preventAbort:!0});const{signature:a,inputSize:i,outputSize:o}=n;return{signature:a,inputSize:i,outputSize:o}}finally{n()}})(e,t)}}function vt(e,t){const{baseURL:n,chunkSize:s}=t;if(!e.interface){let a;try{a=((e,t,n)=>{const s={type:"module"};let a,i;typeof e==se&&(e=e());try{a=new u(e,t)}catch(t){a=e}if(Et)try{i=new F(a)}catch(e){Et=!1,i=new F(a,s)}else i=new F(a,s);return i.addEventListener("message",(e=>(async({data:e},t)=>{const{type:n,value:s,messageId:a,result:i,error:o}=e,{reader:l,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:h}=t;try{if(o){const{message:e,stack:t,code:n,name:s}=o,a=new f(e);r.assign(a,{stack:t,code:n,name:s}),w(a)}else{if("pull"==n){const{value:e,done:r}=await l.read();Dt({type:wt,value:e,done:r,messageId:a},t)}n==wt&&(await c.ready,await c.write(new p(s)),Dt({type:"ack",messageId:a},t)),n==mt&&w(null,i)}}catch(o){Dt({type:mt,messageId:a},t),w(o)}function w(e,t){e?u(e):d(t),c&&c.releaseLock(),h()}})(e,n))),i})(e.scripts[0],n,e)}catch(r){return bt=!1,kt(e,t)}r.assign(e,{worker:a,interface:{run:()=>(async(e,t)=>{let n,s;const a=new _(((e,t)=>{n=e,s=t}));r.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:s,result:a});const{readable:i,options:o,scripts:l}=e,{writable:c,closed:d}=(e=>{let t;const r=new _((e=>t=e));return{writable:new E({async write(t){const r=e.getWriter();await r.ready,await r.write(t),r.releaseLock()},close(){t()},abort:t=>e.getWriter().abort(t)}),closed:r}})(e.writable),u=Dt({type:"start",scripts:l.slice(1),options:o,config:t,readable:i,writable:c},e);u||r.assign(e,{reader:i.getReader(),writer:c.getWriter()});const f=await a;return u||await c.getWriter().close(),await d,f})(e,{chunkSize:s})}})}return e.interface}let Et=!0,Rt=!0;function Dt(e,{worker:t,writer:r,onTaskFinished:n,transferStreams:s}){try{let{value:r,readable:n,writable:a}=e;const i=[];if(r&&(r.byteLength<r.buffer.byteLength?e.value=r.buffer.slice(0,r.byteLength):e.value=r.buffer,i.push(e.value)),s&&Rt?(n&&i.push(n),a&&i.push(a)):e.readable=e.writable=null,i.length)try{return t.postMessage(e,i),!0}catch(r){Rt=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(e){throw r&&r.releaseLock(),n(),e}}let Tt=[];const Ft=[];let At=0;function Ct(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}const Wt="HTTP error ",Nt="HTTP Range not supported",Ut="Writer iterator completed too soon",It="Content-Length",Lt="Range",Ot="HEAD",Ht="GET",Mt="bytes",qt=65536,Pt="writable";class Bt{constructor(){this.size=0}init(){this.initialized=!0}}class Vt extends Bt{get readable(){const e=this,{chunkSize:t=qt}=e,r=new v({start(){this.chunkOffset=0},async pull(n){const{offset:s=0,size:a,diskNumberStart:o}=r,{chunkOffset:l}=this;n.enqueue(await pr(e,s+l,i.min(t,a-l),o)),l+t>a?n.close():this.chunkOffset+=t}});return r}}class Zt extends Bt{constructor(){super();const e=this,t=new E({write:t=>e.writeUint8Array(t)});r.defineProperty(e,Pt,{get:()=>t})}writeUint8Array(){}}class Kt extends Vt{constructor(e){super(),r.assign(this,{blob:e,size:e.size})}async readUint8Array(e,t){const r=this,n=e+t,s=e||n<r.size?r.blob.slice(e,n):r.blob;let a=await s.arrayBuffer();return a.byteLength>t&&(a=a.slice(e,n)),new p(a)}}class jt extends Bt{constructor(e){super();const t=new k,n=[];e&&n.push(["Content-Type",e]),r.defineProperty(this,Pt,{get:()=>t.writable}),this.blob=new d(t.readable,{headers:n}).blob()}getData(){return this.blob}}class Xt extends Vt{constructor(e,t){super(),Gt(this,e,t)}async init(){await Jt(this,ar,tr),super.init()}readUint8Array(e,t){return Qt(this,e,t,ar,tr)}}class Yt extends Vt{constructor(e,t){super(),Gt(this,e,t)}async init(){await Jt(this,ir,rr),super.init()}readUint8Array(e,t){return Qt(this,e,t,ir,rr)}}function Gt(e,t,n){const{preventHeadRequest:s,useRangeHeader:a,forceRangeRequests:i,combineSizeEocd:o}=n;delete(n=r.assign({},n)).preventHeadRequest,delete n.useRangeHeader,delete n.forceRangeRequests,delete n.combineSizeEocd,delete n.useXHR,r.assign(e,{url:t,options:n,preventHeadRequest:s,useRangeHeader:a,forceRangeRequests:i,combineSizeEocd:o})}async function Jt(e,t,r){const{url:n,preventHeadRequest:a,useRangeHeader:i,forceRangeRequests:o,combineSizeEocd:l}=e;if((e=>{const{baseURL:t}=ce(),{protocol:r}=new u(e,t);return"http:"==r||"https:"==r})(n)&&(i||o)&&(void 0===a||a)){const n=await t(Ht,e,$t(e,l?-22:void 0));if(!o&&n.headers.get("Accept-Ranges")!=Mt)throw new f(Nt);{let a;l&&(e.eocdCache=new p(await n.arrayBuffer()));const i=n.headers.get("Content-Range");if(i){const e=i.trim().split(/\s*\/\s*/);if(e.length){const t=e[1];t&&"*"!=t&&(a=s(t))}}a===re?await sr(e,t,r):e.size=a}}else await sr(e,t,r)}async function Qt(e,t,r,n,s){const{useRangeHeader:a,forceRangeRequests:i,eocdCache:o,size:l,options:c}=e;if(a||i){if(o&&t==l-22&&22==r)return o;const s=await n(Ht,e,$t(e,t,r));if(206!=s.status)throw new f(Nt);return new p(await s.arrayBuffer())}{const{data:n}=e;return n||await s(e,c),new p(e.data.subarray(t,t+r))}}function $t(e,t=0,n=1){return r.assign({},er(e),{[Lt]:Mt+"="+(0>t?t:t+"-"+(t+n-1))})}function er({options:e}){const{headers:t}=e;if(t)return Symbol.iterator in t?r.fromEntries(t):t}async function tr(e){await nr(e,ar)}async function rr(e){await nr(e,ir)}async function nr(e,t){const r=await t(Ht,e,er(e));e.data=new p(await r.arrayBuffer()),e.size||(e.size=e.data.length)}async function sr(e,t,r){if(e.preventHeadRequest)await r(e,e.options);else{const n=(await t(Ot,e,er(e))).headers.get(It);n?e.size=s(n):await r(e,e.options)}}async function ar(e,{options:t,url:n},s){const a=await fetch(n,r.assign({},t,{method:e,headers:s}));if(400>a.status)return a;throw 416==a.status?new f(Nt):new f(Wt+(a.statusText||a.status))}function ir(e,{url:t},n){return new _(((s,a)=>{const i=new XMLHttpRequest;if(i.addEventListener("load",(()=>{if(400>i.status){const e=[];i.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach((t=>{const r=t.trim().split(/\s*:\s*/);r[0]=r[0].trim().replace(/^[a-z]|-[a-z]/g,(e=>e.toUpperCase())),e.push(r)})),s({status:i.status,arrayBuffer:()=>i.response,headers:new l(e)})}else a(416==i.status?new f(Nt):new f(Wt+(i.statusText||i.status)))}),!1),i.addEventListener("error",(e=>a(e.detail?e.detail.error:new f("Network error"))),!1),i.open(e,t),n)for(const e of r.entries(n))i.setRequestHeader(e[0],e[1]);i.responseType="arraybuffer",i.send()}))}class or extends Vt{constructor(e,t={}){super(),r.assign(this,{url:e,reader:t.useXHR?new Yt(e,t):new Xt(e,t)})}set size(e){}get size(){return this.reader.size}async init(){await this.reader.init(),super.init()}readUint8Array(e,t){return this.reader.readUint8Array(e,t)}}class lr extends Vt{constructor(e){super(),this.readers=e}async init(){const e=this,{readers:t}=e;e.lastDiskNumber=0,e.lastDiskOffset=0,await _.all(t.map((async(r,n)=>{await r.init(),n!=t.length-1&&(e.lastDiskOffset+=r.size),e.size+=r.size}))),super.init()}async readUint8Array(e,t,r=0){const n=this,{readers:s}=this;let a,o=r;-1==o&&(o=s.length-1);let l=e;for(;l>=s[o].size;)l-=s[o].size,o++;const c=s[o],d=c.size;if(l+t>d){const s=d-l;a=new p(t),a.set(await pr(c,l,s)),a.set(await n.readUint8Array(e+s,t-s,r),s)}else a=await pr(c,l,t);return n.lastDiskNumber=i.max(o,n.lastDiskNumber),a}}class cr extends Bt{constructor(e,t=4294967295){super();const n=this;let s,a,i;r.assign(n,{diskNumber:0,diskOffset:0,size:0,maxSize:t,availableSize:t});const o=new E({async write(t){const{availableSize:r}=n;if(i)t.length<r?await l(t):(await l(t.slice(0,r)),await c(),n.diskOffset+=s.size,n.diskNumber++,i=null,await this.write(t.slice(r)));else{const{value:r,done:o}=await e.next();if(o&&!r)throw new f(Ut);s=r,s.size=0,s.maxSize&&(n.maxSize=s.maxSize),n.availableSize=n.maxSize,await dr(s),a=r.writable,i=a.getWriter(),await this.write(t)}},async close(){await i.ready,await c()}});async function l(e){const t=e.length;t&&(await i.ready,await i.write(e),s.size+=t,n.size+=t,n.availableSize-=t)}async function c(){a.size=s.size,await i.close()}r.defineProperty(n,Pt,{get:()=>o})}}async function dr(e,t){if(!e.init||e.initialized)return _.resolve();await e.init(t)}function ur(e){return t.isArray(e)&&(e=new lr(e)),e instanceof v&&(e={readable:e}),e}function fr(e){e.writable===re&&typeof e.next==se&&(e=new cr(e)),e instanceof E&&(e={writable:e});const{writable:t}=e;return t.size===re&&(t.size=0),e instanceof cr||r.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function pr(e,t,r,n){return e.readUint8Array(t,r,n)}const hr=lr,wr=cr,mr="diskNumberStart",gr="lastModDate",_r="lastAccessDate",yr="creationDate",br="internalFileAttribute",xr="externalFileAttribute",Sr="msDosCompatible",zr="zip64",kr="encrypted",vr="version",Er="versionMadeBy",Rr="zipCrypto",Dr=["filename","rawFilename","compressedSize","uncompressedSize",gr,"rawLastModDate","comment","rawComment",_r,yr,"offset",mr,mr,br,xr,Sr,zr,kr,vr,Er,Rr,"directory","bitFlag","signature","filenameUTF8","commentUTF8","compressionMethod","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"];class Tr{constructor(e){Dr.forEach((t=>this[t]=e[t]))}}const Fr="File already exists",Ar="Zip file comment exceeds 64KB",Cr="File entry comment exceeds 64KB",Wr="File entry name exceeds 64KB",Nr="Version exceeds 65535",Ur="The strength must equal 1, 2, or 3",Ir="Extra field type exceeds 65535",Lr="Extra field data exceeds 64KB",Or="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",Hr="Undefined uncompressed size",Mr=new p([7,0,2,0,65,69,3,0,0]);let qr=0;const Pr=[];class Br{constructor(e,t={}){const n=(e=fr(e)).availableSize!==re&&e.availableSize>0&&e.availableSize!==1/0&&e.maxSize!==re&&e.maxSize>0&&e.maxSize!==1/0;r.assign(this,{writer:e,addSplitZipSignature:n,options:t,config:ce(),files:new l,filenames:new c,offset:t.offset===re?e.writable.size:t.offset,pendingEntriesSize:0,pendingAddFileCalls:new c,bufferedWrites:0})}async add(e="",n,l={}){const c=this,{pendingAddFileCalls:u,config:g}=c;let y;qr<g.maxWorkers?qr++:await new _((e=>Pr.push(e)));try{if(e=e.trim(),c.filenames.has(e))throw new f(Fr);return c.filenames.add(e),y=(async(e,n,l,c)=>{n=n.trim(),c.directory&&!n.endsWith("/")?n+="/":c.directory=n.endsWith("/");const u=Kr(e,c,"encodeText",we);let g=u(n);if(g===re&&(g=we(n)),en(g)>J)throw new f(Wr);const y=c.comment||"";let b=u(y);if(b===re&&(b=we(y)),en(b)>J)throw new f(Cr);const x=Kr(e,c,vr,20);if(x>J)throw new f(Nr);const S=Kr(e,c,Er,20);if(S>J)throw new f(Nr);const z=Kr(e,c,gr,new o),v=Kr(e,c,_r),E=Kr(e,c,yr),R=Kr(e,c,Sr,!0),D=Kr(e,c,br,0),T=Kr(e,c,xr,0),F=Kr(e,c,"passThrough");let A,C;F||(A=Kr(e,c,"password"),C=Kr(e,c,"rawPassword"));const W=Kr(e,c,"encryptionStrength",3),N=Kr(e,c,Rr),U=Kr(e,c,"extendedTimestamp",!0),I=Kr(e,c,"keepOrder",!0),L=Kr(e,c,"level"),O=Kr(e,c,"useWebWorkers"),H=Kr(e,c,"bufferedWrite"),M=Kr(e,c,"dataDescriptorSignature",!1),q=Kr(e,c,"signal"),P=Kr(e,c,"useUnicodeFileNames",!0),B=Kr(e,c,"useCompressionStream");let V=Kr(e,c,"dataDescriptor",!0),Z=Kr(e,c,zr);if(!N&&(A!==re||C!==re)&&(1>W||W>3))throw new f(Ur);let K=new p;const{extraField:j}=c;if(j){let e=0,t=0;j.forEach((t=>e+=4+en(t))),K=new p(e),j.forEach(((e,r)=>{if(r>J)throw new f(Ir);if(en(e)>J)throw new f(Lr);Qr(K,new h([r]),t),Qr(K,new h([en(e)]),t+2),Qr(K,e,t+4),t+=4+en(e)}))}let X=0,Y=0,ne=0;if(F&&(({uncompressedSize:ne}=c),ne===re))throw new f(Hr);const se=!0===Z;l&&(l=ur(l),await dr(l),F?X=jr(ne):l.size===re?(V=!0,(Z||Z===re)&&(Z=!0,ne=X=4294967296)):(ne=l.size,X=jr(ne)));const{diskOffset:ae,diskNumber:ie,maxSize:oe}=e.writer,le=se||ne>G,ce=se||X>G,de=se||e.offset+e.pendingEntriesSize-ae>G,ue=Kr(e,c,"supportZip64SplitFile",!0)&&se||ie+i.ceil(e.pendingEntriesSize/oe)>J;if(de||le||ce||ue){if(!1===Z||!I)throw new f(Or);Z=!0}Z=Z||!1;const fe=Kr(e,c,kr),{signature:pe}=c,he=(e=>{const{rawFilename:t,lastModDate:r,lastAccessDate:n,creationDate:s,level:a,zip64:o,zipCrypto:l,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:f,encryptionStrength:h,extendedTimestamp:m,encrypted:g}=e,_=0!==a&&!u;let y,b,x,S,z=e.version;if(g&&!l){y=new p(en(Mr)+2);const e=$r(y);Yr(e,0,39169),Qr(y,Mr,2),Xr(e,8,h)}else y=new p;if(m){x=new p(9+(n?4:0)+(s?4:0));const e=$r(x);Yr(e,0,21589),Yr(e,2,en(x)-4),S=1+(n?2:0)+(s?4:0),Xr(e,4,S);let t=5;Gr(e,t,i.floor(r.getTime()/1e3)),t+=4,n&&(Gr(e,t,i.floor(n.getTime()/1e3)),t+=4),s&&Gr(e,t,i.floor(s.getTime()/1e3));try{b=new p(36);const e=$r(b),t=Zr(r);Yr(e,0,10),Yr(e,2,32),Yr(e,8,1),Yr(e,10,24),Jr(e,12,t),Jr(e,20,Zr(n)||t),Jr(e,28,Zr(s)||t)}catch(e){b=new p}}else b=x=new p;let k=0;c&&(k|=2048),d&&(k|=8);let v=0;_&&(v=8,a>=1&&3>a&&(k|=6),a>=3&&5>a&&(k|=1),9===a&&(k|=2)),o&&(z=z>45?z:45),g&&(k|=1,l||(z=z>51?z:51,v=99,_&&(y[9]=8)));const E=new p(26),R=$r(E);Yr(R,0,z),Yr(R,2,k),Yr(R,4,v);const D=new w(1),T=$r(D);let F;F=te>r?te:r>ee?ee:r,Yr(T,0,(F.getHours()<<6|F.getMinutes())<<5|F.getSeconds()/2),Yr(T,2,(F.getFullYear()-1980<<4|F.getMonth()+1)<<5|F.getDate());const A=D[0];Gr(R,6,A),Yr(R,22,en(t));const C=en(y,x,b,f);Yr(R,24,C);const W=new p(30+en(t)+C);return Gr($r(W),0,67324752),Qr(W,E,4),Qr(W,t,30),Qr(W,y,30+en(t)),Qr(W,x,30+en(t,y)),Qr(W,b,30+en(t,y,x)),Qr(W,f,30+en(t,y,x,b)),{localHeaderArray:W,headerArray:E,headerView:R,lastModDate:r,rawLastModDate:A,encrypted:g,compressed:_,version:z,compressionMethod:v,extraFieldExtendedTimestampFlag:S,rawExtraFieldExtendedTimestamp:x,rawExtraFieldNTFS:b,rawExtraFieldAES:y,extraFieldLength:C}})(c=r.assign({},c,{rawFilename:g,rawComment:b,version:x,versionMadeBy:S,lastModDate:z,lastAccessDate:v,creationDate:E,rawExtraField:K,zip64:Z,zip64UncompressedSize:le,zip64CompressedSize:ce,zip64Offset:de,zip64DiskNumberStart:ue,password:A,rawPassword:C,level:B||e.config.CompressionStream!==re||e.config.CompressionStreamNative!==re?L:0,useWebWorkers:O,encryptionStrength:W,extendedTimestamp:U,zipCrypto:N,bufferedWrite:H,keepOrder:I,useUnicodeFileNames:P,dataDescriptor:V,dataDescriptorSignature:M,signal:q,msDosCompatible:R,internalFileAttribute:D,externalFileAttribute:T,useCompressionStream:B,passThrough:F,encrypted:!!(A&&en(A)||C&&en(C))||F&&fe,signature:pe})),me=(e=>{const{zip64:t,dataDescriptor:r,dataDescriptorSignature:n}=e;let s,a=new p,i=0;return r&&(a=new p(t?n?24:20:n?16:12),s=$r(a),n&&(i=4,Gr(s,0,$))),{dataDescriptorArray:a,dataDescriptorView:s,dataDescriptorOffset:i}})(c),ge=en(he.localHeaderArray,me.dataDescriptorArray);let _e;Y=ge+X,e.options.usdz&&(Y+=Y+64),e.pendingEntriesSize+=Y;try{_e=await(async(e,n,o,l,c)=>{const{files:u,writer:h}=e,{keepOrder:w,dataDescriptor:g,signal:y}=c,{headerInfo:b}=l,{usdz:x}=e.options,S=t.from(u.values()).pop();let z,v,E,R,D,T,F,A={};u.set(n,A);try{let t;w&&(t=S&&S.lock,A.lock=new _((e=>E=e))),!(c.bufferedWrite||e.writerLocked||e.bufferedWrites&&w)&&g||x?(T=h,await C()):(T=new k,F=new d(T.readable).blob(),T.writable.size=0,z=!0,e.bufferedWrites++,await dr(h)),await dr(T);const{writable:b}=h;let{diskOffset:v}=h;if(e.addSplitZipSignature){delete e.addSplitZipSignature;const t=new p(4);Gr($r(t),0,Q),await Vr(b,t),e.offset+=4}x&&((e,t)=>{const{headerInfo:r}=e;let{localHeaderArray:n,extraFieldLength:s}=r,a=$r(n),i=64-(t+en(n))%64;4>i&&(i+=64);const o=new p(i),l=$r(o);Yr(l,0,6534),Yr(l,2,i-2);const c=n;r.localHeaderArray=n=new p(en(c)+i),Qr(n,c),Qr(n,o,en(c)),a=$r(n),Yr(a,28,s+i),e.metadataSize+=i})(l,e.offset-v),z||(await t,await W(b));const{diskNumber:N}=h;if(D=!0,A.diskNumberStart=N,A=await(async(e,t,{diskNumberStart:n,lock:o},l,c,d)=>{const{headerInfo:u,dataDescriptorInfo:f,metadataSize:h}=l,{localHeaderArray:w,headerArray:m,lastModDate:g,rawLastModDate:y,encrypted:b,compressed:x,version:S,compressionMethod:z,rawExtraFieldExtendedTimestamp:k,extraFieldExtendedTimestampFlag:v,rawExtraFieldNTFS:E,rawExtraFieldAES:R}=u,{dataDescriptorArray:D}=f,{rawFilename:T,lastAccessDate:F,creationDate:A,password:C,rawPassword:W,level:N,zip64:U,zip64UncompressedSize:I,zip64CompressedSize:L,zip64Offset:O,zip64DiskNumberStart:H,zipCrypto:M,dataDescriptor:q,directory:P,versionMadeBy:B,rawComment:V,rawExtraField:Z,useWebWorkers:K,onstart:j,onprogress:X,onend:Y,signal:J,encryptionStrength:Q,extendedTimestamp:$,msDosCompatible:ee,internalFileAttribute:te,externalFileAttribute:ne,useCompressionStream:se,passThrough:ae}=d,ie={lock:o,versionMadeBy:B,zip64:U,directory:!!P,filenameUTF8:!0,rawFilename:T,commentUTF8:!0,rawComment:V,rawExtraFieldExtendedTimestamp:k,rawExtraFieldNTFS:E,rawExtraFieldAES:R,rawExtraField:Z,extendedTimestamp:$,msDosCompatible:ee,internalFileAttribute:te,externalFileAttribute:ne,diskNumberStart:n};let{signature:oe,uncompressedSize:le}=d,ce=0;ae||(le=0);const{writable:de}=t;if(e){e.chunkSize=(e=>i.max(e.chunkSize,64))(c),await Vr(de,w);const t=e.readable,r=t.size=e.size,n={options:{codecType:gt,level:N,rawPassword:W,password:C,encryptionStrength:Q,zipCrypto:b&&M,passwordVerification:b&&M&&y>>8&255,signed:!ae,compressed:x&&!ae,encrypted:b&&!ae,useWebWorkers:K,useCompressionStream:se,transferStreams:!1},config:c,streamOptions:{signal:J,size:r,onstart:j,onprogress:X,onend:Y}},a=await(async(e,t)=>{const{options:r,config:n}=t,{transferStreams:a,useWebWorkers:i,useCompressionStream:o,codecType:l,compressed:c,signed:d,encrypted:u}=r,{workerScripts:f,maxWorkers:p}=n;t.transferStreams=a||a===re;const h=!(c||d||u||t.transferStreams);return t.useWebWorkers=!h&&(i||i===re&&n.useWebWorkers),t.scripts=t.useWebWorkers&&f?f[l]:[],r.useCompressionStream=o||o===re&&n.useCompressionStream,(await(async()=>{const r=Tt.find((e=>!e.busy));if(r)return Ct(r),new xt(r,e,t,w);if(Tt.length<p){const r={indexWorker:At};return At++,Tt.push(r),new xt(r,e,t,w)}return new _((r=>Ft.push({resolve:r,stream:e,workerOptions:t})))})()).run();function w(e){if(Ft.length){const[{resolve:t,stream:r,workerOptions:n}]=Ft.splice(0,1);t(new xt(e,r,n,w))}else e.worker?(Ct(e),((e,t)=>{const{config:r}=t,{terminateWorkerTimeout:n}=r;s.isFinite(n)&&n>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout((async()=>{Tt=Tt.filter((t=>t!=e));try{await e.terminate()}catch(e){}}),n))})(e,t)):Tt=Tt.filter((t=>t!=e))}})({readable:t,writable:de},n);ce=a.outputSize,ae||(le=a.inputSize,oe=a.signature),de.size+=le}else await Vr(de,w);let ue;if(U){let e=4;I&&(e+=8),L&&(e+=8),O&&(e+=8),H&&(e+=4),ue=new p(e)}else ue=new p;return((e,t)=>{const{signature:r,rawExtraFieldZip64:n,compressedSize:s,uncompressedSize:i,headerInfo:o,dataDescriptorInfo:l}=e,{headerView:c,encrypted:d}=o,{dataDescriptorView:u,dataDescriptorOffset:f}=l,{zip64:p,zip64UncompressedSize:h,zip64CompressedSize:w,zipCrypto:m,dataDescriptor:g}=t;if(d&&!m||r===re||(Gr(c,10,r),g&&Gr(u,f,r)),p){const e=$r(n);Yr(e,0,1),Yr(e,2,en(n)-4);let t=4;h&&(Gr(c,18,G),Jr(e,t,a(i)),t+=8),w&&(Gr(c,14,G),Jr(e,t,a(s))),g&&(Jr(u,f+4,a(s)),Jr(u,f+12,a(i)))}else Gr(c,14,s),Gr(c,18,i),g&&(Gr(u,f+4,s),Gr(u,f+8,i))})({signature:oe,rawExtraFieldZip64:ue,compressedSize:ce,uncompressedSize:le,headerInfo:u,dataDescriptorInfo:f},d),q&&await Vr(de,D),r.assign(ie,{uncompressedSize:le,compressedSize:ce,lastModDate:g,rawLastModDate:y,creationDate:A,lastAccessDate:F,encrypted:b,zipCrypto:M,size:h+ce,compressionMethod:z,version:S,headerArray:m,signature:oe,rawExtraFieldZip64:ue,extraFieldExtendedTimestampFlag:v,zip64UncompressedSize:I,zip64CompressedSize:L,zip64Offset:O,zip64DiskNumberStart:H}),ie})(o,T,A,l,e.config,c),D=!1,u.set(n,A),A.filename=n,z){await T.writable.getWriter().close();let e=await F;await t,await C(),R=!0,g||(e=await(async(e,t,r,{zipCrypto:n})=>{let s;s=await t.slice(0,26).arrayBuffer(),26!=s.byteLength&&(s=s.slice(0,26));const a=new m(s);return e.encrypted&&!n||Gr(a,14,e.signature),e.zip64?(Gr(a,18,G),Gr(a,22,G)):(Gr(a,18,e.compressedSize),Gr(a,22,e.uncompressedSize)),await Vr(r,new p(s)),t.slice(s.byteLength)})(A,e,b,c)),await W(b),A.diskNumberStart=h.diskNumber,v=h.diskOffset,await e.stream().pipeTo(b,{preventClose:!0,preventAbort:!0,signal:y}),b.size+=e.size,R=!1}if(A.offset=e.offset-v,A.zip64)((e,t)=>{const{rawExtraFieldZip64:r,offset:n,diskNumberStart:s}=e,{zip64UncompressedSize:i,zip64CompressedSize:o,zip64Offset:l,zip64DiskNumberStart:c}=t,d=$r(r);let u=4;i&&(u+=8),o&&(u+=8),l&&(Jr(d,u,a(n)),u+=8),c&&Gr(d,u,s)})(A,c);else if(A.offset>G)throw new f(Or);return e.offset+=A.size,A}catch(t){if(z&&R||!z&&D){if(e.hasCorruptedEntries=!0,t)try{t.corruptedEntry=!0}catch(e){}z?e.offset+=T.writable.size:e.offset=T.writable.size}throw u.delete(n),t}finally{z&&e.bufferedWrites--,E&&E(),v&&v()}async function C(){e.writerLocked=!0;const{lockWriter:t}=e;e.lockWriter=new _((t=>v=()=>{e.writerLocked=!1,t()})),await t}async function W(e){en(b.localHeaderArray)>h.availableSize&&(h.availableSize=0,await Vr(e,new p))}})(e,n,l,{headerInfo:he,dataDescriptorInfo:me,metadataSize:ge},c)}finally{e.pendingEntriesSize-=Y}return r.assign(_e,{name:n,comment:y,extraField:j}),new Tr(_e)})(c,e,n,l),u.add(y),await y}catch(t){throw c.filenames.delete(e),t}finally{u.delete(y);const e=Pr.shift();e?e():qr--}}async close(e=new p,r={}){const{pendingAddFileCalls:n,writer:s}=this,{writable:o}=s;for(;n.size;)await _.allSettled(t.from(n));return await(async(e,r,n)=>{const{files:s,writer:o}=e,{diskOffset:l,writable:c}=o;let{diskNumber:d}=o,u=0,h=0,w=e.offset-l,m=s.size;for(const[,e]of s){const{rawFilename:t,rawExtraFieldZip64:r,rawExtraFieldAES:n,rawComment:s,rawExtraFieldNTFS:a,rawExtraField:o,extendedTimestamp:l,extraFieldExtendedTimestampFlag:c,lastModDate:d}=e;let u;if(l){u=new p(9);const e=$r(u);Yr(e,0,21589),Yr(e,2,5),Xr(e,4,c),Gr(e,5,i.floor(d.getTime()/1e3))}else u=new p;e.rawExtraFieldCDExtendedTimestamp=u,h+=46+en(t,s,r,n,a,u,o)}const g=new p(h),_=$r(g);await dr(o);let y=0;for(const[e,r]of t.from(s.values()).entries()){const{offset:t,rawFilename:a,rawExtraFieldZip64:i,rawExtraFieldAES:l,rawExtraFieldCDExtendedTimestamp:d,rawExtraFieldNTFS:f,rawExtraField:p,rawComment:h,versionMadeBy:w,headerArray:m,directory:b,zip64:x,zip64UncompressedSize:S,zip64CompressedSize:z,zip64DiskNumberStart:k,zip64Offset:v,msDosCompatible:E,internalFileAttribute:R,externalFileAttribute:D,diskNumberStart:T,uncompressedSize:F,compressedSize:A}=r,C=en(i,l,d,f,p);Gr(_,u,33639248),Yr(_,u+4,w);const W=$r(m);S||Gr(W,18,F),z||Gr(W,14,A),Qr(g,m,u+6),Yr(_,u+30,C),Yr(_,u+32,en(h)),Yr(_,u+34,x&&k?J:T),Yr(_,u+36,R),D?Gr(_,u+38,D):b&&E&&Xr(_,u+38,16),Gr(_,u+42,x&&v?G:t),Qr(g,a,u+46),Qr(g,i,u+46+en(a)),Qr(g,l,u+46+en(a,i)),Qr(g,d,u+46+en(a,i,l)),Qr(g,f,u+46+en(a,i,l,d)),Qr(g,p,u+46+en(a,i,l,d,f)),Qr(g,h,u+46+en(a)+C);const N=46+en(a,h)+C;if(u-y>o.availableSize&&(o.availableSize=0,await Vr(c,g.slice(y,u)),y=u),u+=N,n.onprogress)try{await n.onprogress(e+1,s.size,new Tr(r))}catch(e){}}await Vr(c,y?g.slice(y):g);let b=o.diskNumber;const{availableSize:x}=o;22>x&&b++;let S=Kr(e,n,zr);if(w>G||h>G||m>J||b>J){if(!1===S)throw new f(Or);S=!0}const z=new p(S?98:22),k=$r(z);u=0,S&&(Gr(k,0,101075792),Jr(k,4,a(44)),Yr(k,12,45),Yr(k,14,45),Gr(k,16,b),Gr(k,20,d),Jr(k,24,a(m)),Jr(k,32,a(m)),Jr(k,40,a(h)),Jr(k,48,a(w)),Gr(k,56,117853008),Jr(k,64,a(w)+a(h)),Gr(k,72,b+1),Kr(e,n,"supportZip64SplitFile",!0)&&(b=J,d=J),m=J,w=G,h=G,u+=76),Gr(k,u,101010256),Yr(k,u+4,b),Yr(k,u+6,d),Yr(k,u+8,m),Yr(k,u+10,m),Gr(k,u+12,h),Gr(k,u+16,w);const v=en(r);if(v){if(v>J)throw new f(Ar);Yr(k,u+20,v)}await Vr(c,z),v&&await Vr(c,r)})(this,e,r),Kr(this,r,"preventClose")||await o.getWriter().close(),s.getData?s.getData():o}}async function Vr(e,t){const r=e.getWriter();try{await r.ready,e.size+=en(t),await r.write(t)}finally{r.releaseLock()}}function Zr(e){if(e)return(a(e.getTime())+a(116444736e5))*a(1e4)}function Kr(e,t,r,n){const s=t[r]===re?e.options[r]:t[r];return s===re?n:s}function jr(e){return e+5*(i.floor(e/16383)+1)}function Xr(e,t,r){e.setUint8(t,r)}function Yr(e,t,r){e.setUint16(t,r,!0)}function Gr(e,t,r){e.setUint32(t,r,!0)}function Jr(e,t,r){e.setBigUint64(t,r,!0)}function Qr(e,t,r){e.set(t,r)}function $r(e){return new m(e.buffer)}function en(...e){let t=0;return e.forEach((e=>e&&(t+=e.length))),t}de({Deflate:function(e){const t=new Y,r=(n=e&&e.chunkSize?e.chunkSize:65536)+5*(i.floor(n/16383)+1);var n;const s=new p(r);let a=e?e.level:-1;void 0===a&&(a=-1),t.deflateInit(a),t.next_out=s,this.append=(e,n)=>{let a,i,o=0,l=0,c=0;const d=[];if(e.length){t.next_in_index=0,t.next_in=e,t.avail_in=e.length;do{if(t.next_out_index=0,t.avail_out=r,a=t.deflate(0),0!=a)throw new f("deflating: "+t.msg);t.next_out_index&&(t.next_out_index==r?d.push(new p(s)):d.push(s.subarray(0,t.next_out_index))),c+=t.next_out_index,n&&t.next_in_index>0&&t.next_in_index!=o&&(n(t.next_in_index),o=t.next_in_index)}while(t.avail_in>0||0===t.avail_out);return d.length>1?(i=new p(c),d.forEach((e=>{i.set(e,l),l+=e.length}))):i=d[0]?new p(d[0]):new p,i}},this.flush=()=>{let e,n,a=0,i=0;const o=[];do{if(t.next_out_index=0,t.avail_out=r,e=t.deflate(4),1!=e&&0!=e)throw new f("deflating: "+t.msg);r-t.avail_out>0&&o.push(s.slice(0,t.next_out_index)),i+=t.next_out_index}while(t.avail_in>0||0===t.avail_out);return t.deflateEnd(),n=new p(i),o.forEach((e=>{n.set(e,a),a+=e.length})),n}}}),e.BlobReader=Kt,e.BlobWriter=jt,e.Data64URIReader=class extends Vt{constructor(e){super();let t=e.length;for(;"="==e.charAt(t-1);)t--;const n=e.indexOf(",")+1;r.assign(this,{dataURI:e,dataStart:n,size:i.floor(.75*(t-n))})}readUint8Array(e,t){const{dataStart:r,dataURI:n}=this,s=new p(t),a=4*i.floor(e/3),o=atob(n.substring(a+r,4*i.ceil((e+t)/3)+r)),l=e-3*i.floor(a/4);for(let e=l;l+t>e;e++)s[e-l]=o.charCodeAt(e);return s}},e.Data64URIWriter=class extends Zt{constructor(e){super(),r.assign(this,{data:"data:"+(e||"")+";base64,",pending:[]})}writeUint8Array(e){const t=this;let r=0,s=t.pending;const a=t.pending.length;for(t.pending="",r=0;r<3*i.floor((a+e.length)/3)-a;r++)s+=n.fromCharCode(e[r]);for(;r<e.length;r++)t.pending+=n.fromCharCode(e[r]);s.length>2?t.data+=z(s):t.pending=s}getData(){return this.data+z(this.pending)}},e.ERR_DUPLICATED_NAME=Fr,e.ERR_HTTP_RANGE=Nt,e.ERR_INVALID_COMMENT=Ar,e.ERR_INVALID_ENCRYPTION_STRENGTH=Ur,e.ERR_INVALID_ENTRY_COMMENT=Cr,e.ERR_INVALID_ENTRY_NAME=Wr,e.ERR_INVALID_EXTRAFIELD_DATA=Lr,e.ERR_INVALID_EXTRAFIELD_TYPE=Ir,e.ERR_INVALID_VERSION=Nr,e.ERR_ITERATOR_COMPLETED_TOO_SOON=Ut,e.ERR_UNDEFINED_UNCOMPRESSED_SIZE=Hr,e.ERR_UNSUPPORTED_FORMAT=Or,e.HttpRangeReader=class extends or{constructor(e,t={}){t.useRangeHeader=!0,super(e,t)}},e.HttpReader=or,e.Reader=Vt,e.SplitDataReader=lr,e.SplitDataWriter=cr,e.SplitZipReader=hr,e.SplitZipWriter=wr,e.TextReader=class extends Kt{constructor(e){super(new g([e],{type:"text/plain"}))}},e.TextWriter=class extends jt{constructor(e){super(e),r.assign(this,{encoding:e,utf8:!e||"utf-8"==e.toLowerCase()})}async getData(){const{encoding:e,utf8:t}=this,n=await super.getData();if(n.text&&t)return n.text();{const t=new FileReader;return new _(((s,a)=>{r.assign(t,{onload:({target:e})=>s(e.result),onerror:()=>a(t.error)}),t.readAsText(n,e)}))}}},e.Uint8ArrayReader=class extends Vt{constructor(e){super(),r.assign(this,{array:e,size:e.length})}readUint8Array(e,t){return this.array.slice(e,e+t)}},e.Uint8ArrayWriter=class extends Zt{init(e=0){r.assign(this,{offset:0,array:new p(e)}),super.init()}writeUint8Array(e){const t=this;if(t.offset+e.length>t.array.length){const r=t.array;t.array=new p(r.length+e.length),t.array.set(r)}t.array.set(e,t.offset),t.offset+=e.length}getData(){return this.array}},e.Writer=Zt,e.ZipWriter=Br,e.ZipWriterStream=class{constructor(e={}){const{readable:t,writable:r}=new k;this.readable=t,this.zipWriter=new Br(r,e)}transform(e){const{readable:t,writable:r}=new k({flush:()=>{this.zipWriter.close()}});return this.zipWriter.add(e,t),{readable:this.readable,writable:r}}writable(e){const{readable:t,writable:r}=new k;return this.zipWriter.add(e,t),r}close(e,t={}){return this.zipWriter.close(e,t)}},e.configure=de,e.getMimeType=()=>"application/octet-stream",e.initReader=ur,e.initStream=dr,e.initWriter=fr,e.readUint8Array=pr,e.terminateWorkers=async()=>{await _.allSettled(Tt.map((e=>(Ct(e),e.terminate()))))}}));
((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).zip={})})(this,(function(e){"use strict";const{Array:t,Object:r,String:n,Number:s,BigInt:a,Math:i,Date:o,Map:l,Set:c,Response:d,URL:u,Error:f,Uint8Array:p,Uint16Array:h,Uint32Array:w,DataView:m,Blob:g,Promise:_,TextEncoder:y,TextDecoder:b,document:x,crypto:S,btoa:z,TransformStream:k,ReadableStream:v,WritableStream:E,CompressionStream:R,DecompressionStream:D,navigator:T,Worker:F}="undefined"!=typeof globalThis?globalThis:this||self,A=15,C=573,W=-2;function N(e){return U(e.map((([e,r])=>new t(e).fill(r,0,e))))}function U(e){return e.reduce(((e,r)=>e.concat(t.isArray(r)?U(r):r)),[])}const I=[0,1,2,3].concat(...N([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function L(){const e=this;function t(e,t){let r=0;do{r|=1&e,e>>>=1,r<<=1}while(--t>0);return r>>>1}e.build_tree=r=>{const n=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems;let o,l,c,d=-1;for(r.heap_len=0,r.heap_max=C,o=0;a>o;o++)0!==n[2*o]?(r.heap[++r.heap_len]=d=o,r.depth[o]=0):n[2*o+1]=0;for(;2>r.heap_len;)c=r.heap[++r.heap_len]=2>d?++d:0,n[2*c]=1,r.depth[c]=0,r.opt_len--,s&&(r.static_len-=s[2*c+1]);for(e.max_code=d,o=i.floor(r.heap_len/2);o>=1;o--)r.pqdownheap(n,o);c=a;do{o=r.heap[1],r.heap[1]=r.heap[r.heap_len--],r.pqdownheap(n,1),l=r.heap[1],r.heap[--r.heap_max]=o,r.heap[--r.heap_max]=l,n[2*c]=n[2*o]+n[2*l],r.depth[c]=i.max(r.depth[o],r.depth[l])+1,n[2*o+1]=n[2*l+1]=c,r.heap[1]=c++,r.pqdownheap(n,1)}while(r.heap_len>=2);r.heap[--r.heap_max]=r.heap[1],(t=>{const r=e.dyn_tree,n=e.stat_desc.static_tree,s=e.stat_desc.extra_bits,a=e.stat_desc.extra_base,i=e.stat_desc.max_length;let o,l,c,d,u,f,p=0;for(d=0;A>=d;d++)t.bl_count[d]=0;for(r[2*t.heap[t.heap_max]+1]=0,o=t.heap_max+1;C>o;o++)l=t.heap[o],d=r[2*r[2*l+1]+1]+1,d>i&&(d=i,p++),r[2*l+1]=d,l>e.max_code||(t.bl_count[d]++,u=0,a>l||(u=s[l-a]),f=r[2*l],t.opt_len+=f*(d+u),n&&(t.static_len+=f*(n[2*l+1]+u)));if(0!==p){do{for(d=i-1;0===t.bl_count[d];)d--;t.bl_count[d]--,t.bl_count[d+1]+=2,t.bl_count[i]--,p-=2}while(p>0);for(d=i;0!==d;d--)for(l=t.bl_count[d];0!==l;)c=t.heap[--o],c>e.max_code||(r[2*c+1]!=d&&(t.opt_len+=(d-r[2*c+1])*r[2*c],r[2*c+1]=d),l--)}})(r),((e,r,n)=>{const s=[];let a,i,o,l=0;for(a=1;A>=a;a++)s[a]=l=l+n[a-1]<<1;for(i=0;r>=i;i++)o=e[2*i+1],0!==o&&(e[2*i]=t(s[o]++,o))})(n,e.max_code,r.bl_count)}}function O(e,t,r,n,s){const a=this;a.static_tree=e,a.extra_bits=t,a.extra_base=r,a.elems=n,a.max_length=s}L._length_code=[0,1,2,3,4,5,6,7].concat(...N([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),L.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],L.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],L.d_code=e=>256>e?I[e]:I[256+(e>>>7)],L.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],L.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],L.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],L.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const H=N([[144,8],[112,9],[24,7],[8,8]]);O.static_ltree=U([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((e,t)=>[e,H[t]])));const M=N([[30,5]]);function q(e,t,r,n,s){const a=this;a.good_length=e,a.max_lazy=t,a.nice_length=r,a.max_chain=n,a.func=s}O.static_dtree=U([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((e,t)=>[e,M[t]]))),O.static_l_desc=new O(O.static_ltree,L.extra_lbits,257,286,A),O.static_d_desc=new O(O.static_dtree,L.extra_dbits,0,30,A),O.static_bl_desc=new O(null,L.extra_blbits,0,19,7);const P=[new q(0,0,0,0,0),new q(4,4,8,4,1),new q(4,5,16,8,1),new q(4,6,32,32,1),new q(4,4,16,16,2),new q(8,16,32,32,2),new q(8,16,128,128,2),new q(8,32,128,256,2),new q(32,128,258,1024,2),new q(32,258,258,4096,2)],B=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],V=113,Z=666,K=262;function j(e,t,r,n){const s=e[2*t],a=e[2*r];return a>s||s==a&&n[t]<=n[r]}function X(){const e=this;let t,r,n,s,a,o,l,c,d,u,f,w,m,g,_,y,b,x,S,z,k,v,E,R,D,T,F,A,C,N,U,I,H;const M=new L,q=new L,X=new L;let Y,G,J,Q,$,ee;function te(){let t;for(t=0;286>t;t++)U[2*t]=0;for(t=0;30>t;t++)I[2*t]=0;for(t=0;19>t;t++)H[2*t]=0;U[512]=1,e.opt_len=e.static_len=0,G=J=0}function re(e,t){let r,n=-1,s=e[1],a=0,i=7,o=4;0===s&&(i=138,o=3),e[2*(t+1)+1]=65535;for(let l=0;t>=l;l++)r=s,s=e[2*(l+1)+1],++a<i&&r==s||(o>a?H[2*r]+=a:0!==r?(r!=n&&H[2*r]++,H[32]++):a>10?H[36]++:H[34]++,a=0,n=r,0===s?(i=138,o=3):r==s?(i=6,o=3):(i=7,o=4))}function ne(t){e.pending_buf[e.pending++]=t}function se(e){ne(255&e),ne(e>>>8&255)}function ae(e,t){let r;const n=t;ee>16-n?(r=e,$|=r<<ee&65535,se($),$=r>>>16-ee,ee+=n-16):($|=e<<ee&65535,ee+=n)}function ie(e,t){const r=2*e;ae(65535&t[r],65535&t[r+1])}function oe(e,t){let r,n,s=-1,a=e[1],i=0,o=7,l=4;for(0===a&&(o=138,l=3),r=0;t>=r;r++)if(n=a,a=e[2*(r+1)+1],++i>=o||n!=a){if(l>i)do{ie(n,H)}while(0!=--i);else 0!==n?(n!=s&&(ie(n,H),i--),ie(16,H),ae(i-3,2)):i>10?(ie(18,H),ae(i-11,7)):(ie(17,H),ae(i-3,3));i=0,s=n,0===a?(o=138,l=3):n==a?(o=6,l=3):(o=7,l=4)}}function le(){16==ee?(se($),$=0,ee=0):8>ee||(ne(255&$),$>>>=8,ee-=8)}function ce(t,r){let n,s,a;if(e.dist_buf[G]=t,e.lc_buf[G]=255&r,G++,0===t?U[2*r]++:(J++,t--,U[2*(L._length_code[r]+256+1)]++,I[2*L.d_code(t)]++),!(8191&G)&&F>2){for(n=8*G,s=k-b,a=0;30>a;a++)n+=I[2*a]*(5+L.extra_dbits[a]);if(n>>>=3,J<i.floor(G/2)&&n<i.floor(s/2))return!0}return G==Y-1}function de(t,r){let n,s,a,i,o=0;if(0!==G)do{n=e.dist_buf[o],s=e.lc_buf[o],o++,0===n?ie(s,t):(a=L._length_code[s],ie(a+256+1,t),i=L.extra_lbits[a],0!==i&&(s-=L.base_length[a],ae(s,i)),n--,a=L.d_code(n),ie(a,r),i=L.extra_dbits[a],0!==i&&(n-=L.base_dist[a],ae(n,i)))}while(G>o);ie(256,t),Q=t[513]}function ue(){ee>8?se($):ee>0&&ne(255&$),$=0,ee=0}function fe(t,r,n){ae(0+(n?1:0),3),((t,r)=>{ue(),Q=8,se(r),se(~r),e.pending_buf.set(c.subarray(t,t+r),e.pending),e.pending+=r})(t,r)}function pe(r){((t,r,n)=>{let s,a,i=0;F>0?(M.build_tree(e),q.build_tree(e),i=(()=>{let t;for(re(U,M.max_code),re(I,q.max_code),X.build_tree(e),t=18;t>=3&&0===H[2*L.bl_order[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(),s=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a>s||(s=a)):s=a=r+5,r+4>s||-1==t?a==s?(ae(2+(n?1:0),3),de(O.static_ltree,O.static_dtree)):(ae(4+(n?1:0),3),((e,t,r)=>{let n;for(ae(e-257,5),ae(t-1,5),ae(r-4,4),n=0;r>n;n++)ae(H[2*L.bl_order[n]+1],3);oe(U,e-1),oe(I,t-1)})(M.max_code+1,q.max_code+1,i+1),de(U,I)):fe(t,r,n),te(),n&&ue()})(0>b?-1:b,k-b,r),b=k,t.flush_pending()}function he(){let e,r,n,s;do{if(s=d-E-k,0===s&&0===k&&0===E)s=a;else if(-1==s)s--;else if(k>=a+a-K){c.set(c.subarray(a,a+a),0),v-=a,k-=a,b-=a,e=m,n=e;do{r=65535&f[--n],f[n]=a>r?0:r-a}while(0!=--e);e=a,n=e;do{r=65535&u[--n],u[n]=a>r?0:r-a}while(0!=--e);s+=a}if(0===t.avail_in)return;e=t.read_buf(c,k+E,s),E+=e,3>E||(w=255&c[k],w=(w<<y^255&c[k+1])&_)}while(K>E&&0!==t.avail_in)}function we(e){let t,r,n=D,s=k,i=R;const o=k>a-K?k-(a-K):0;let d=N;const f=l,p=k+258;let h=c[s+i-1],w=c[s+i];C>R||(n>>=2),d>E&&(d=E);do{if(t=e,c[t+i]==w&&c[t+i-1]==h&&c[t]==c[s]&&c[++t]==c[s+1]){s+=2,t++;do{}while(c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&c[++s]==c[++t]&&p>s);if(r=258-(p-s),s=p-258,r>i){if(v=e,i=r,r>=d)break;h=c[s+i-1],w=c[s+i]}}}while((e=65535&u[e&f])>o&&0!=--n);return i>E?E:i}e.depth=[],e.bl_count=[],e.heap=[],U=[],I=[],H=[],e.pqdownheap=(t,r)=>{const n=e.heap,s=n[r];let a=r<<1;for(;a<=e.heap_len&&(a<e.heap_len&&j(t,n[a+1],n[a],e.depth)&&a++,!j(t,s,n[a],e.depth));)n[r]=n[a],r=a,a<<=1;n[r]=s},e.deflateInit=(t,S,v,L,B,Z)=>(L||(L=8),B||(B=8),Z||(Z=0),t.msg=null,-1==S&&(S=6),1>B||B>9||8!=L||9>v||v>15||0>S||S>9||0>Z||Z>2?W:(t.dstate=e,o=v,a=1<<o,l=a-1,g=B+7,m=1<<g,_=m-1,y=i.floor((g+3-1)/3),c=new p(2*a),u=[],f=[],Y=1<<B+6,e.pending_buf=new p(4*Y),n=4*Y,e.dist_buf=new h(Y),e.lc_buf=new p(Y),F=S,A=Z,(t=>(t.total_in=t.total_out=0,t.msg=null,e.pending=0,e.pending_out=0,r=V,s=0,M.dyn_tree=U,M.stat_desc=O.static_l_desc,q.dyn_tree=I,q.stat_desc=O.static_d_desc,X.dyn_tree=H,X.stat_desc=O.static_bl_desc,$=0,ee=0,Q=8,te(),(()=>{d=2*a,f[m-1]=0;for(let e=0;m-1>e;e++)f[e]=0;T=P[F].max_lazy,C=P[F].good_length,N=P[F].nice_length,D=P[F].max_chain,k=0,b=0,E=0,x=R=2,z=0,w=0})(),0))(t))),e.deflateEnd=()=>42!=r&&r!=V&&r!=Z?W:(e.lc_buf=null,e.dist_buf=null,e.pending_buf=null,f=null,u=null,c=null,e.dstate=null,r==V?-3:0),e.deflateParams=(e,t,r)=>{let n=0;return-1==t&&(t=6),0>t||t>9||0>r||r>2?W:(P[F].func!=P[t].func&&0!==e.total_in&&(n=e.deflate(1)),F!=t&&(F=t,T=P[F].max_lazy,C=P[F].good_length,N=P[F].nice_length,D=P[F].max_chain),A=r,n)},e.deflateSetDictionary=(e,t,n)=>{let s,i=n,o=0;if(!t||42!=r)return W;if(3>i)return 0;for(i>a-K&&(i=a-K,o=n-i),c.set(t.subarray(o,o+i),0),k=i,b=i,w=255&c[0],w=(w<<y^255&c[1])&_,s=0;i-3>=s;s++)w=(w<<y^255&c[s+2])&_,u[s&l]=f[w],f[w]=s;return 0},e.deflate=(i,d)=>{let p,h,g,D,C;if(d>4||0>d)return W;if(!i.next_out||!i.next_in&&0!==i.avail_in||r==Z&&4!=d)return i.msg=B[4],W;if(0===i.avail_out)return i.msg=B[7],-5;var N;if(t=i,D=s,s=d,42==r&&(h=8+(o-8<<4)<<8,g=(F-1&255)>>1,g>3&&(g=3),h|=g<<6,0!==k&&(h|=32),h+=31-h%31,r=V,ne((N=h)>>8&255),ne(255&N)),0!==e.pending){if(t.flush_pending(),0===t.avail_out)return s=-1,0}else if(0===t.avail_in&&D>=d&&4!=d)return t.msg=B[7],-5;if(r==Z&&0!==t.avail_in)return i.msg=B[7],-5;if(0!==t.avail_in||0!==E||0!=d&&r!=Z){switch(C=-1,P[F].func){case 0:C=(e=>{let r,s=65535;for(s>n-5&&(s=n-5);;){if(1>=E){if(he(),0===E&&0==e)return 0;if(0===E)break}if(k+=E,E=0,r=b+s,(0===k||k>=r)&&(E=k-r,k=r,pe(!1),0===t.avail_out))return 0;if(k-b>=a-K&&(pe(!1),0===t.avail_out))return 0}return pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d);break;case 1:C=(e=>{let r,n=0;for(;;){if(K>E){if(he(),K>E&&0==e)return 0;if(0===E)break}if(3>E||(w=(w<<y^255&c[k+2])&_,n=65535&f[w],u[k&l]=f[w],f[w]=k),0===n||(k-n&65535)>a-K||2!=A&&(x=we(n)),3>x)r=ce(0,255&c[k]),E--,k++;else if(r=ce(k-v,x-3),E-=x,x>T||3>E)k+=x,x=0,w=255&c[k],w=(w<<y^255&c[k+1])&_;else{x--;do{k++,w=(w<<y^255&c[k+2])&_,n=65535&f[w],u[k&l]=f[w],f[w]=k}while(0!=--x);k++}if(r&&(pe(!1),0===t.avail_out))return 0}return pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d);break;case 2:C=(e=>{let r,n,s=0;for(;;){if(K>E){if(he(),K>E&&0==e)return 0;if(0===E)break}if(3>E||(w=(w<<y^255&c[k+2])&_,s=65535&f[w],u[k&l]=f[w],f[w]=k),R=x,S=v,x=2,0!==s&&T>R&&a-K>=(k-s&65535)&&(2!=A&&(x=we(s)),5>=x&&(1==A||3==x&&k-v>4096)&&(x=2)),3>R||x>R)if(0!==z){if(r=ce(0,255&c[k-1]),r&&pe(!1),k++,E--,0===t.avail_out)return 0}else z=1,k++,E--;else{n=k+E-3,r=ce(k-1-S,R-3),E-=R-1,R-=2;do{++k>n||(w=(w<<y^255&c[k+2])&_,s=65535&f[w],u[k&l]=f[w],f[w]=k)}while(0!=--R);if(z=0,x=2,k++,r&&(pe(!1),0===t.avail_out))return 0}}return 0!==z&&(r=ce(0,255&c[k-1]),z=0),pe(4==e),0===t.avail_out?4==e?2:0:4==e?3:1})(d)}if(2!=C&&3!=C||(r=Z),0==C||2==C)return 0===t.avail_out&&(s=-1),0;if(1==C){if(1==d)ae(2,3),ie(256,O.static_ltree),le(),9>1+Q+10-ee&&(ae(2,3),ie(256,O.static_ltree),le()),Q=7;else if(fe(0,0,!1),3==d)for(p=0;m>p;p++)f[p]=0;if(t.flush_pending(),0===t.avail_out)return s=-1,0}}return 4!=d?0:1}}function Y(){const e=this;e.next_in_index=0,e.next_out_index=0,e.avail_in=0,e.total_in=0,e.avail_out=0,e.total_out=0}Y.prototype={deflateInit(e,t){const r=this;return r.dstate=new X,t||(t=A),r.dstate.deflateInit(r,e,t)},deflate(e){const t=this;return t.dstate?t.dstate.deflate(t,e):W},deflateEnd(){const e=this;if(!e.dstate)return W;const t=e.dstate.deflateEnd();return e.dstate=null,t},deflateParams(e,t){const r=this;return r.dstate?r.dstate.deflateParams(r,e,t):W},deflateSetDictionary(e,t){const r=this;return r.dstate?r.dstate.deflateSetDictionary(r,e,t):W},read_buf(e,t,r){const n=this;let s=n.avail_in;return s>r&&(s=r),0===s?0:(n.avail_in-=s,e.set(n.next_in.subarray(n.next_in_index,n.next_in_index+s),t),n.next_in_index+=s,n.total_in+=s,s)},flush_pending(){const e=this;let t=e.dstate.pending;t>e.avail_out&&(t=e.avail_out),0!==t&&(e.next_out.set(e.dstate.pending_buf.subarray(e.dstate.pending_out,e.dstate.pending_out+t),e.next_out_index),e.next_out_index+=t,e.dstate.pending_out+=t,e.total_out+=t,e.avail_out-=t,e.dstate.pending-=t,0===e.dstate.pending&&(e.dstate.pending_out=0))}};const G=4294967295,J=65535,Q=134695760,$=Q,ee=new o(2107,11,31),te=new o(1980,0,1),re=void 0,ne="undefined",se="function";class ae{constructor(e){return class extends k{constructor(t,r){const n=new e(r);super({transform(e,t){t.enqueue(n.append(e))},flush(e){const t=n.flush();t&&e.enqueue(t)}})}}}}let ie=2;try{typeof T!=ne&&T.hardwareConcurrency&&(ie=T.hardwareConcurrency)}catch(e){}const oe={chunkSize:524288,maxWorkers:ie,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:re,CompressionStreamNative:typeof R!=ne&&R,DecompressionStreamNative:typeof D!=ne&&D},le=r.assign({},oe);function ce(){return le}function de(e){const{baseURL:r,chunkSize:n,maxWorkers:s,terminateWorkerTimeout:a,useCompressionStream:i,useWebWorkers:o,Deflate:l,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:p}=e;if(ue("baseURL",r),ue("chunkSize",n),ue("maxWorkers",s),ue("terminateWorkerTimeout",a),ue("useCompressionStream",i),ue("useWebWorkers",o),l&&(le.CompressionStream=new ae(l)),c&&(le.DecompressionStream=new ae(c)),ue("CompressionStream",d),ue("DecompressionStream",u),p!==re){const{deflate:e,inflate:r}=p;if((e||r)&&(le.workerScripts||(le.workerScripts={})),e){if(!t.isArray(e))throw new f("workerScripts.deflate must be an array");le.workerScripts.deflate=e}if(r){if(!t.isArray(r))throw new f("workerScripts.inflate must be an array");le.workerScripts.inflate=r}}}function ue(e,t){t!==re&&(le[e]=t)}const fe=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;fe[e]=t}class pe{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let r=0,n=0|e.length;n>r;r++)t=t>>>8^fe[255&(t^e[r])];this.crc=t}get(){return~this.crc}}class he extends k{constructor(){let e;const t=new pe;super({transform(e,r){t.append(e),r.enqueue(e)},flush(){const r=new p(4);new m(r.buffer).setUint32(0,t.get()),e.value=r}}),e=this}}function we(e){if(typeof y==ne){const t=new p((e=unescape(encodeURIComponent(e))).length);for(let r=0;r<t.length;r++)t[r]=e.charCodeAt(r);return t}return(new y).encode(e)}const me={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const r=e[e.length-1],n=me.getPartial(r);return 32===n?e.concat(t):me._shiftRight(t,n,0|r,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const r=e[t-1];return 32*(t-1)+me.getPartial(r)},clamp(e,t){if(32*e.length<t)return e;const r=(e=e.slice(0,i.ceil(t/32))).length;return t&=31,r>0&&t&&(e[r-1]=me.partial(t,e[r-1]&2147483648>>t-1,1)),e},partial:(e,t,r)=>32===e?t:(r?0|t:t<<32-e)+1099511627776*e,getPartial:e=>i.round(e/1099511627776)||32,_shiftRight(e,t,r,n){for(void 0===n&&(n=[]);t>=32;t-=32)n.push(r),r=0;if(0===t)return n.concat(e);for(let s=0;s<e.length;s++)n.push(r|e[s]>>>t),r=e[s]<<32-t;const s=e.length?e[e.length-1]:0,a=me.getPartial(s);return n.push(me.partial(t+a&31,t+a>32?r:n.pop(),1)),n}},ge={bytes:{fromBits(e){const t=me.bitLength(e)/8,r=new p(t);let n;for(let s=0;t>s;s++)3&s||(n=e[s/4]),r[s]=n>>>24,n<<=8;return r},toBits(e){const t=[];let r,n=0;for(r=0;r<e.length;r++)n=n<<8|e[r],3&~r||(t.push(n),n=0);return 3&r&&t.push(me.partial(8*(3&r),n)),t}}},_e=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=ge.utf8String.toBits(e));const r=t._buffer=me.concat(t._buffer,e),n=t._length,s=t._length=n+me.bitLength(e);if(s>9007199254740991)throw new f("Cannot hash more than 2^53 - 1 bits");const a=new w(r);let i=0;for(let e=t.blockSize+n-(t.blockSize+n&t.blockSize-1);s>=e;e+=t.blockSize)t._block(a.subarray(16*i,16*(i+1))),i+=1;return r.splice(0,16*i),t}finalize(){const e=this;let t=e._buffer;const r=e._h;t=me.concat(t,[me.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(i.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),r}_f(e,t,r,n){return e>19?e>39?e>59?e>79?void 0:t^r^n:t&r|t&n|r&n:t^r^n:t&r|~t&n}_S(e,t){return t<<e|t>>>32-e}_block(e){const r=this,n=r._h,s=t(80);for(let t=0;16>t;t++)s[t]=e[t];let a=n[0],o=n[1],l=n[2],c=n[3],d=n[4];for(let e=0;79>=e;e++){16>e||(s[e]=r._S(1,s[e-3]^s[e-8]^s[e-14]^s[e-16]));const t=r._S(5,a)+r._f(e,o,l,c)+d+s[e]+r._key[i.floor(e/20)]|0;d=c,c=l,l=r._S(30,o),o=a,a=t}n[0]=n[0]+a|0,n[1]=n[1]+o|0,n[2]=n[2]+l|0,n[3]=n[3]+c|0,n[4]=n[4]+d|0}},ye={getRandomValues(e){const t=new w(e.buffer),r=e=>{let t=987654321;const r=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&r,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&r)&r)/4294967296+.5)*(i.random()>.5?1:-1))};for(let n,s=0;s<e.length;s+=4){const e=r(4294967296*(n||i.random()));n=987654071*e(),t[s/4]=4294967296*e()|0}return e}},be={importKey:e=>new be.hmacSha1(ge.bytes.toBits(e)),pbkdf2(e,t,r,n){if(r=r||1e4,0>n||0>r)throw new f("invalid params to pbkdf2");const s=1+(n>>5)<<2;let a,i,o,l,c;const d=new ArrayBuffer(s),u=new m(d);let p=0;const h=me;for(t=ge.bytes.toBits(t),c=1;(s||1)>p;c++){for(a=i=e.encrypt(h.concat(t,[c])),o=1;r>o;o++)for(i=e.encrypt(i),l=0;l<i.length;l++)a[l]^=i[l];for(o=0;(s||1)>p&&o<a.length;o++)u.setInt32(p,a[o]),p+=4}return d.slice(0,n/8)},hmacSha1:class{constructor(e){const t=this,r=t._hash=_e,n=[[],[]];t._baseHash=[new r,new r];const s=t._baseHash[0].blockSize/32;e.length>s&&(e=(new r).update(e).finalize());for(let t=0;s>t;t++)n[0][t]=909522486^e[t],n[1][t]=1549556828^e[t];t._baseHash[0].update(n[0]),t._baseHash[1].update(n[1]),t._resultHash=new r(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),r=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),r}encrypt(e){if(this._updated)throw new f("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},xe=typeof S!=ne&&typeof S.getRandomValues==se,Se="Invalid password",ze="Invalid signature",ke="zipjs-abort-check-password";function ve(e){return xe?S.getRandomValues(e):ye.getRandomValues(e)}const Ee=16,Re={name:"PBKDF2"},De=r.assign({hash:{name:"HMAC"}},Re),Te=r.assign({iterations:1e3,hash:{name:"SHA-1"}},Re),Fe=["deriveBits"],Ae=[8,12,16],Ce=[16,24,32],We=10,Ne=[0,0,0,0],Ue=typeof S!=ne,Ie=Ue&&S.subtle,Le=Ue&&typeof Ie!=ne,Oe=ge.bytes,He=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const r=t._tables[0][4],n=t._tables[1],s=e.length;let a,i,o,l=1;if(4!==s&&6!==s&&8!==s)throw new f("invalid aes key size");for(t._key=[i=e.slice(0),o=[]],a=s;4*s+28>a;a++){let e=i[a-1];(a%s==0||8===s&&a%s==4)&&(e=r[e>>>24]<<24^r[e>>16&255]<<16^r[e>>8&255]<<8^r[255&e],a%s==0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),i[a]=i[a-s]^e}for(let e=0;a;e++,a--){const t=i[3&e?a:a-4];o[e]=4>=a||4>e?t:n[0][r[t>>>24]]^n[1][r[t>>16&255]]^n[2][r[t>>8&255]]^n[3][r[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],r=e[4],n=t[4],s=[],a=[];let i,o,l,c;for(let e=0;256>e;e++)a[(s[e]=e<<1^283*(e>>7))^e]=e;for(let d=i=0;!r[d];d^=o||1,i=a[i]||1){let a=i^i<<1^i<<2^i<<3^i<<4;a=a>>8^255&a^99,r[d]=a,n[a]=d,c=s[l=s[o=s[d]]];let u=16843009*c^65537*l^257*o^16843008*d,f=257*s[a]^16843008*a;for(let r=0;4>r;r++)e[r][d]=f=f<<24^f>>>8,t[r][a]=u=u<<24^u>>>8}for(let r=0;5>r;r++)e[r]=e[r].slice(0),t[r]=t[r].slice(0)}_crypt(e,t){if(4!==e.length)throw new f("invalid aes block size");const r=this._key[t],n=r.length/4-2,s=[0,0,0,0],a=this._tables[t],i=a[0],o=a[1],l=a[2],c=a[3],d=a[4];let u,p,h,w=e[0]^r[0],m=e[t?3:1]^r[1],g=e[2]^r[2],_=e[t?1:3]^r[3],y=4;for(let e=0;n>e;e++)u=i[w>>>24]^o[m>>16&255]^l[g>>8&255]^c[255&_]^r[y],p=i[m>>>24]^o[g>>16&255]^l[_>>8&255]^c[255&w]^r[y+1],h=i[g>>>24]^o[_>>16&255]^l[w>>8&255]^c[255&m]^r[y+2],_=i[_>>>24]^o[w>>16&255]^l[m>>8&255]^c[255&g]^r[y+3],y+=4,w=u,m=p,g=h;for(let e=0;4>e;e++)s[t?3&-e:e]=d[w>>>24]<<24^d[m>>16&255]<<16^d[g>>8&255]<<8^d[255&_]^r[y++],u=w,w=m,m=g,g=_,_=u;return s}},Me=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,r=e>>8&255,n=255&e;255===t?(t=0,255===r?(r=0,255===n?n=0:++n):++r):++t,e=0,e+=t<<16,e+=r<<8,e+=n}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,r){let n;if(!(n=t.length))return[];const s=me.bitLength(t);for(let s=0;n>s;s+=4){this.incCounter(r);const n=e.encrypt(r);t[s]^=n[0],t[s+1]^=n[1],t[s+2]^=n[2],t[s+3]^=n[3]}return me.clamp(t,s)}},qe=be.hmacSha1;let Pe=Ue&&Le&&typeof Ie.importKey==se,Be=Ue&&Le&&typeof Ie.deriveBits==se;class Ve extends k{constructor({password:e,rawPassword:t,signed:n,encryptionStrength:s,checkPasswordOnly:a}){super({start(){r.assign(this,{ready:new _((e=>this.resolveReady=e)),password:Xe(e,t),signed:n,strength:s-1,pending:new p})},async transform(e,t){const r=this,{password:n,strength:s,resolveReady:i,ready:o}=r;n?(await(async(e,t,r,n)=>{const s=await je(e,t,r,Ge(n,0,Ae[t])),a=Ge(n,Ae[t]);if(s[0]!=a[0]||s[1]!=a[1])throw new f(Se)})(r,s,n,Ge(e,0,Ae[s]+2)),e=Ge(e,Ae[s]+2),a?t.error(new f(ke)):i()):await o;const l=new p(e.length-We-(e.length-We)%Ee);t.enqueue(Ke(r,e,l,0,We,!0))},async flush(e){const{signed:t,ctr:r,hmac:n,pending:s,ready:a}=this;if(n&&r){await a;const i=Ge(s,0,s.length-We),o=Ge(s,s.length-We);let l=new p;if(i.length){const e=Qe(Oe,i);n.update(e);const t=r.update(e);l=Je(Oe,t)}if(t){const e=Ge(Je(Oe,n.digest()),0,We);for(let t=0;We>t;t++)if(e[t]!=o[t])throw new f(ze)}e.enqueue(l)}}})}}class Ze extends k{constructor({password:e,rawPassword:t,encryptionStrength:n}){let s;super({start(){r.assign(this,{ready:new _((e=>this.resolveReady=e)),password:Xe(e,t),strength:n-1,pending:new p})},async transform(e,t){const r=this,{password:n,strength:s,resolveReady:a,ready:i}=r;let o=new p;n?(o=await(async(e,t,r)=>{const n=ve(new p(Ae[t]));return Ye(n,await je(e,t,r,n))})(r,s,n),a()):await i;const l=new p(o.length+e.length-e.length%Ee);l.set(o,0),t.enqueue(Ke(r,e,l,o.length,0))},async flush(e){const{ctr:t,hmac:r,pending:n,ready:a}=this;if(r&&t){await a;let i=new p;if(n.length){const e=t.update(Qe(Oe,n));r.update(e),i=Je(Oe,e)}s.signature=Je(Oe,r.digest()).slice(0,We),e.enqueue(Ye(i,s.signature))}}}),s=this}}function Ke(e,t,r,n,s,a){const{ctr:i,hmac:o,pending:l}=e,c=t.length-s;let d;for(l.length&&(t=Ye(l,t),r=((e,t)=>{if(t&&t>e.length){const r=e;(e=new p(t)).set(r,0)}return e})(r,c-c%Ee)),d=0;c-Ee>=d;d+=Ee){const e=Qe(Oe,Ge(t,d,d+Ee));a&&o.update(e);const s=i.update(e);a||o.update(s),r.set(Je(Oe,s),d+n)}return e.pending=Ge(t,d),r}async function je(e,n,s,a){e.password=null;const i=await(async(e,t,r,n,s)=>{if(!Pe)return be.importKey(t);try{return await Ie.importKey("raw",t,r,!1,s)}catch(e){return Pe=!1,be.importKey(t)}})(0,s,De,0,Fe),o=await(async(e,t,r)=>{if(!Be)return be.pbkdf2(t,e.salt,Te.iterations,r);try{return await Ie.deriveBits(e,t,r)}catch(n){return Be=!1,be.pbkdf2(t,e.salt,Te.iterations,r)}})(r.assign({salt:a},Te),i,8*(2*Ce[n]+2)),l=new p(o),c=Qe(Oe,Ge(l,0,Ce[n])),d=Qe(Oe,Ge(l,Ce[n],2*Ce[n])),u=Ge(l,2*Ce[n]);return r.assign(e,{keys:{key:c,authentication:d,passwordVerification:u},ctr:new Me(new He(c),t.from(Ne)),hmac:new qe(d)}),u}function Xe(e,t){return t===re?we(e):t}function Ye(e,t){let r=e;return e.length+t.length&&(r=new p(e.length+t.length),r.set(e,0),r.set(t,e.length)),r}function Ge(e,t,r){return e.subarray(t,r)}function Je(e,t){return e.fromBits(t)}function Qe(e,t){return e.toBits(t)}class $e extends k{constructor({password:e,passwordVerification:t,checkPasswordOnly:n}){super({start(){r.assign(this,{password:e,passwordVerification:t}),nt(this,e)},transform(e,t){const r=this;if(r.password){const t=tt(r,e.subarray(0,12));if(r.password=null,t[11]!=r.passwordVerification)throw new f(Se);e=e.subarray(12)}n?t.error(new f(ke)):t.enqueue(tt(r,e))}})}}class et extends k{constructor({password:e,passwordVerification:t}){super({start(){r.assign(this,{password:e,passwordVerification:t}),nt(this,e)},transform(e,t){const r=this;let n,s;if(r.password){r.password=null;const t=ve(new p(12));t[11]=r.passwordVerification,n=new p(e.length+t.length),n.set(rt(r,t),0),s=12}else n=new p(e.length),s=0;n.set(rt(r,e),s),t.enqueue(n)}})}}function tt(e,t){const r=new p(t.length);for(let n=0;n<t.length;n++)r[n]=at(e)^t[n],st(e,r[n]);return r}function rt(e,t){const r=new p(t.length);for(let n=0;n<t.length;n++)r[n]=at(e)^t[n],st(e,t[n]);return r}function nt(e,t){const n=[305419896,591751049,878082192];r.assign(e,{keys:n,crcKey0:new pe(n[0]),crcKey2:new pe(n[2])});for(let r=0;r<t.length;r++)st(e,t.charCodeAt(r))}function st(e,t){let[r,n,s]=e.keys;e.crcKey0.append([t]),r=~e.crcKey0.get(),n=ot(i.imul(ot(n+it(r)),134775813)+1),e.crcKey2.append([n>>>24]),s=~e.crcKey2.get(),e.keys=[r,n,s]}function at(e){const t=2|e.keys[2];return it(i.imul(t,1^t)>>>8)}function it(e){return 255&e}function ot(e){return 4294967295&e}const lt="deflate-raw";class ct extends k{constructor(e,{chunkSize:t,CompressionStream:r,CompressionStreamNative:n}){super({});const{compressed:s,encrypted:a,useCompressionStream:i,zipCrypto:o,signed:l,level:c}=e,d=this;let u,f,p=ut(super.readable);a&&!o||!l||(u=new he,p=ht(p,u)),s&&(p=pt(p,i,{level:c,chunkSize:t},n,r)),a&&(o?p=ht(p,new et(e)):(f=new Ze(e),p=ht(p,f))),ft(d,p,(()=>{let e;a&&!o&&(e=f.signature),a&&!o||!l||(e=new m(u.value.buffer).getUint32(0)),d.signature=e}))}}class dt extends k{constructor(e,{chunkSize:t,DecompressionStream:r,DecompressionStreamNative:n}){super({});const{zipCrypto:s,encrypted:a,signed:i,signature:o,compressed:l,useCompressionStream:c}=e;let d,u,p=ut(super.readable);a&&(s?p=ht(p,new $e(e)):(u=new Ve(e),p=ht(p,u))),l&&(p=pt(p,c,{chunkSize:t},n,r)),a&&!s||!i||(d=new he,p=ht(p,d)),ft(this,p,(()=>{if((!a||s)&&i){const e=new m(d.value.buffer);if(o!=e.getUint32(0,!1))throw new f(ze)}}))}}function ut(e){return ht(e,new k({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ft(e,t,n){t=ht(t,new k({flush:n})),r.defineProperty(e,"readable",{get:()=>t})}function pt(e,t,r,n,s){try{e=ht(e,new(t&&n?n:s)(lt,r))}catch(n){if(!t)return e;try{e=ht(e,new s(lt,r))}catch(t){return e}}return e}function ht(e,t){return e.pipeThrough(t)}const wt="data",mt="close",gt="deflate";class _t extends k{constructor(e,t){super({});const n=this,{codecType:s}=e;let a;s.startsWith(gt)?a=ct:s.startsWith("inflate")&&(a=dt);let i=0,o=0;const l=new a(e,t),c=super.readable,d=new k({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){r.assign(n,{inputSize:o})}}),u=new k({transform(e,t){e&&e.length&&(i+=e.length,t.enqueue(e))},flush(){const{signature:e}=l;r.assign(n,{signature:e,outputSize:i,inputSize:o})}});r.defineProperty(n,"readable",{get:()=>c.pipeThrough(d).pipeThrough(l).pipeThrough(u)})}}class yt extends k{constructor(e){let t;super({transform:function r(n,s){if(t){const e=new p(t.length+n.length);e.set(t),e.set(n,t.length),n=e,t=null}n.length>e?(s.enqueue(n.slice(0,e)),r(n.slice(e),s)):t=n},flush(e){t&&t.length&&e.enqueue(t)}})}}let bt=typeof F!=ne;class xt{constructor(e,{readable:t,writable:n},{options:s,config:a,streamOptions:i,useWebWorkers:o,transferStreams:l,scripts:c},d){const{signal:u}=i;return r.assign(e,{busy:!0,readable:t.pipeThrough(new yt(a.chunkSize)).pipeThrough(new St(t,i),{signal:u}),writable:n,options:r.assign({},s),scripts:c,transferStreams:l,terminate:()=>new _((t=>{const{worker:r,busy:n}=e;r?(n?e.resolveTerminated=t:(r.terminate(),t()),e.interface=null):t()})),onTaskFinished(){const{resolveTerminated:t}=e;t&&(e.resolveTerminated=null,e.terminated=!0,e.worker.terminate(),t()),e.busy=!1,d(e)}}),(o&&bt?vt:kt)(e,a)}}class St extends k{constructor(e,{onstart:t,onprogress:r,size:n,onend:s}){let a=0;super({async start(){t&&await zt(t,n)},async transform(e,t){a+=e.length,r&&await zt(r,a,n),t.enqueue(e)},async flush(){e.size=a,s&&await zt(s,a)}})}}async function zt(e,...t){try{await e(...t)}catch(e){}}function kt(e,t){return{run:()=>(async({options:e,readable:t,writable:r,onTaskFinished:n},s)=>{try{const n=new _t(e,s);await t.pipeThrough(n).pipeTo(r,{preventClose:!0,preventAbort:!0});const{signature:a,inputSize:i,outputSize:o}=n;return{signature:a,inputSize:i,outputSize:o}}finally{n()}})(e,t)}}function vt(e,t){const{baseURL:n,chunkSize:s}=t;if(!e.interface){let a;try{a=((e,t,n)=>{const s={type:"module"};let a,i;typeof e==se&&(e=e());try{a=new u(e,t)}catch(t){a=e}if(Et)try{i=new F(a)}catch(e){Et=!1,i=new F(a,s)}else i=new F(a,s);return i.addEventListener("message",(e=>(async({data:e},t)=>{const{type:n,value:s,messageId:a,result:i,error:o}=e,{reader:l,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:h}=t;try{if(o){const{message:e,stack:t,code:n,name:s}=o,a=new f(e);r.assign(a,{stack:t,code:n,name:s}),w(a)}else{if("pull"==n){const{value:e,done:r}=await l.read();Dt({type:wt,value:e,done:r,messageId:a},t)}n==wt&&(await c.ready,await c.write(new p(s)),Dt({type:"ack",messageId:a},t)),n==mt&&w(null,i)}}catch(o){Dt({type:mt,messageId:a},t),w(o)}function w(e,t){e?u(e):d(t),c&&c.releaseLock(),h()}})(e,n))),i})(e.scripts[0],n,e)}catch(r){return bt=!1,kt(e,t)}r.assign(e,{worker:a,interface:{run:()=>(async(e,t)=>{let n,s;const a=new _(((e,t)=>{n=e,s=t}));r.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:s,result:a});const{readable:i,options:o,scripts:l}=e,{writable:c,closed:d}=(e=>{let t;const r=new _((e=>t=e));return{writable:new E({async write(t){const r=e.getWriter();await r.ready,await r.write(t),r.releaseLock()},close(){t()},abort:t=>e.getWriter().abort(t)}),closed:r}})(e.writable),u=Dt({type:"start",scripts:l.slice(1),options:o,config:t,readable:i,writable:c},e);u||r.assign(e,{reader:i.getReader(),writer:c.getWriter()});const f=await a;return u||await c.getWriter().close(),await d,f})(e,{chunkSize:s})}})}return e.interface}let Et=!0,Rt=!0;function Dt(e,{worker:t,writer:r,onTaskFinished:n,transferStreams:s}){try{let{value:r,readable:n,writable:a}=e;const i=[];if(r&&(r.byteLength<r.buffer.byteLength?e.value=r.buffer.slice(0,r.byteLength):e.value=r.buffer,i.push(e.value)),s&&Rt?(n&&i.push(n),a&&i.push(a)):e.readable=e.writable=null,i.length)try{return t.postMessage(e,i),!0}catch(r){Rt=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(e){throw r&&r.releaseLock(),n(),e}}let Tt=[];const Ft=[];let At=0;function Ct(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}const Wt="HTTP error ",Nt="HTTP Range not supported",Ut="Writer iterator completed too soon",It="Content-Length",Lt="Range",Ot="HEAD",Ht="GET",Mt="bytes",qt=65536,Pt="writable";class Bt{constructor(){this.size=0}init(){this.initialized=!0}}class Vt extends Bt{get readable(){const e=this,{chunkSize:t=qt}=e,r=new v({start(){this.chunkOffset=0},async pull(n){const{offset:s=0,size:a,diskNumberStart:o}=r,{chunkOffset:l}=this;n.enqueue(await pr(e,s+l,i.min(t,a-l),o)),l+t>a?n.close():this.chunkOffset+=t}});return r}}class Zt extends Bt{constructor(){super();const e=this,t=new E({write:t=>e.writeUint8Array(t)});r.defineProperty(e,Pt,{get:()=>t})}writeUint8Array(){}}class Kt extends Vt{constructor(e){super(),r.assign(this,{blob:e,size:e.size})}async readUint8Array(e,t){const r=this,n=e+t,s=e||n<r.size?r.blob.slice(e,n):r.blob;let a=await s.arrayBuffer();return a.byteLength>t&&(a=a.slice(e,n)),new p(a)}}class jt extends Bt{constructor(e){super();const t=new k,n=[];e&&n.push(["Content-Type",e]),r.defineProperty(this,Pt,{get:()=>t.writable}),this.blob=new d(t.readable,{headers:n}).blob()}getData(){return this.blob}}class Xt extends Vt{constructor(e,t){super(),Gt(this,e,t)}async init(){await Jt(this,ar,tr),super.init()}readUint8Array(e,t){return Qt(this,e,t,ar,tr)}}class Yt extends Vt{constructor(e,t){super(),Gt(this,e,t)}async init(){await Jt(this,ir,rr),super.init()}readUint8Array(e,t){return Qt(this,e,t,ir,rr)}}function Gt(e,t,n){const{preventHeadRequest:s,useRangeHeader:a,forceRangeRequests:i,combineSizeEocd:o}=n;delete(n=r.assign({},n)).preventHeadRequest,delete n.useRangeHeader,delete n.forceRangeRequests,delete n.combineSizeEocd,delete n.useXHR,r.assign(e,{url:t,options:n,preventHeadRequest:s,useRangeHeader:a,forceRangeRequests:i,combineSizeEocd:o})}async function Jt(e,t,r){const{url:n,preventHeadRequest:a,useRangeHeader:i,forceRangeRequests:o,combineSizeEocd:l}=e;if((e=>{const{baseURL:t}=ce(),{protocol:r}=new u(e,t);return"http:"==r||"https:"==r})(n)&&(i||o)&&(void 0===a||a)){const n=await t(Ht,e,$t(e,l?-22:void 0));if(!o&&n.headers.get("Accept-Ranges")!=Mt)throw new f(Nt);{let a;l&&(e.eocdCache=new p(await n.arrayBuffer()));const i=n.headers.get("Content-Range");if(i){const e=i.trim().split(/\s*\/\s*/);if(e.length){const t=e[1];t&&"*"!=t&&(a=s(t))}}a===re?await sr(e,t,r):e.size=a}}else await sr(e,t,r)}async function Qt(e,t,r,n,s){const{useRangeHeader:a,forceRangeRequests:i,eocdCache:o,size:l,options:c}=e;if(a||i){if(o&&t==l-22&&22==r)return o;const s=await n(Ht,e,$t(e,t,r));if(206!=s.status)throw new f(Nt);return new p(await s.arrayBuffer())}{const{data:n}=e;return n||await s(e,c),new p(e.data.subarray(t,t+r))}}function $t(e,t=0,n=1){return r.assign({},er(e),{[Lt]:Mt+"="+(0>t?t:t+"-"+(t+n-1))})}function er({options:e}){const{headers:t}=e;if(t)return Symbol.iterator in t?r.fromEntries(t):t}async function tr(e){await nr(e,ar)}async function rr(e){await nr(e,ir)}async function nr(e,t){const r=await t(Ht,e,er(e));e.data=new p(await r.arrayBuffer()),e.size||(e.size=e.data.length)}async function sr(e,t,r){if(e.preventHeadRequest)await r(e,e.options);else{const n=(await t(Ot,e,er(e))).headers.get(It);n?e.size=s(n):await r(e,e.options)}}async function ar(e,{options:t,url:n},s){const a=await fetch(n,r.assign({},t,{method:e,headers:s}));if(400>a.status)return a;throw 416==a.status?new f(Nt):new f(Wt+(a.statusText||a.status))}function ir(e,{url:t},n){return new _(((s,a)=>{const i=new XMLHttpRequest;if(i.addEventListener("load",(()=>{if(400>i.status){const e=[];i.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach((t=>{const r=t.trim().split(/\s*:\s*/);r[0]=r[0].trim().replace(/^[a-z]|-[a-z]/g,(e=>e.toUpperCase())),e.push(r)})),s({status:i.status,arrayBuffer:()=>i.response,headers:new l(e)})}else a(416==i.status?new f(Nt):new f(Wt+(i.statusText||i.status)))}),!1),i.addEventListener("error",(e=>a(e.detail?e.detail.error:new f("Network error"))),!1),i.open(e,t),n)for(const e of r.entries(n))i.setRequestHeader(e[0],e[1]);i.responseType="arraybuffer",i.send()}))}class or extends Vt{constructor(e,t={}){super(),r.assign(this,{url:e,reader:t.useXHR?new Yt(e,t):new Xt(e,t)})}set size(e){}get size(){return this.reader.size}async init(){await this.reader.init(),super.init()}readUint8Array(e,t){return this.reader.readUint8Array(e,t)}}class lr extends Vt{constructor(e){super(),this.readers=e}async init(){const e=this,{readers:t}=e;e.lastDiskNumber=0,e.lastDiskOffset=0,await _.all(t.map((async(r,n)=>{await r.init(),n!=t.length-1&&(e.lastDiskOffset+=r.size),e.size+=r.size}))),super.init()}async readUint8Array(e,t,r=0){const n=this,{readers:s}=this;let a,o=r;-1==o&&(o=s.length-1);let l=e;for(;l>=s[o].size;)l-=s[o].size,o++;const c=s[o],d=c.size;if(l+t>d){const s=d-l;a=new p(t),a.set(await pr(c,l,s)),a.set(await n.readUint8Array(e+s,t-s,r),s)}else a=await pr(c,l,t);return n.lastDiskNumber=i.max(o,n.lastDiskNumber),a}}class cr extends Bt{constructor(e,t=4294967295){super();const n=this;let s,a,i;r.assign(n,{diskNumber:0,diskOffset:0,size:0,maxSize:t,availableSize:t});const o=new E({async write(t){const{availableSize:r}=n;if(i)t.length<r?await l(t):(await l(t.slice(0,r)),await c(),n.diskOffset+=s.size,n.diskNumber++,i=null,await this.write(t.slice(r)));else{const{value:r,done:o}=await e.next();if(o&&!r)throw new f(Ut);s=r,s.size=0,s.maxSize&&(n.maxSize=s.maxSize),n.availableSize=n.maxSize,await dr(s),a=r.writable,i=a.getWriter(),await this.write(t)}},async close(){await i.ready,await c()}});async function l(e){const t=e.length;t&&(await i.ready,await i.write(e),s.size+=t,n.size+=t,n.availableSize-=t)}async function c(){a.size=s.size,await i.close()}r.defineProperty(n,Pt,{get:()=>o})}}async function dr(e,t){if(!e.init||e.initialized)return _.resolve();await e.init(t)}function ur(e){return t.isArray(e)&&(e=new lr(e)),e instanceof v&&(e={readable:e}),e}function fr(e){e.writable===re&&typeof e.next==se&&(e=new cr(e)),e instanceof E&&(e={writable:e});const{writable:t}=e;return t.size===re&&(t.size=0),e instanceof cr||r.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function pr(e,t,r,n){return e.readUint8Array(t,r,n)}const hr=lr,wr=cr,mr="diskNumberStart",gr="lastModDate",_r="lastAccessDate",yr="creationDate",br="internalFileAttribute",xr="externalFileAttribute",Sr="msDosCompatible",zr="zip64",kr="encrypted",vr="version",Er="versionMadeBy",Rr="zipCrypto",Dr=["filename","rawFilename","compressedSize","uncompressedSize",gr,"rawLastModDate","comment","rawComment",_r,yr,"offset",mr,mr,br,xr,Sr,zr,kr,vr,Er,Rr,"directory","bitFlag","signature","filenameUTF8","commentUTF8","compressionMethod","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"];class Tr{constructor(e){Dr.forEach((t=>this[t]=e[t]))}}const Fr="File already exists",Ar="Zip file comment exceeds 64KB",Cr="File entry comment exceeds 64KB",Wr="File entry name exceeds 64KB",Nr="Version exceeds 65535",Ur="The strength must equal 1, 2, or 3",Ir="Extra field type exceeds 65535",Lr="Extra field data exceeds 64KB",Or="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",Hr="Undefined uncompressed size",Mr=new p([7,0,2,0,65,69,3,0,0]);let qr=0;const Pr=[];class Br{constructor(e,t={}){const n=(e=fr(e)).availableSize!==re&&e.availableSize>0&&e.availableSize!==1/0&&e.maxSize!==re&&e.maxSize>0&&e.maxSize!==1/0;r.assign(this,{writer:e,addSplitZipSignature:n,options:t,config:ce(),files:new l,filenames:new c,offset:t.offset===re?e.writable.size:t.offset,pendingEntriesSize:0,pendingAddFileCalls:new c,bufferedWrites:0})}async add(e="",n,l={}){const c=this,{pendingAddFileCalls:u,config:g}=c;let y;qr<g.maxWorkers?qr++:await new _((e=>Pr.push(e)));try{if(e=e.trim(),c.filenames.has(e))throw new f(Fr);return c.filenames.add(e),y=(async(e,n,l,c)=>{n=n.trim(),c.directory&&!n.endsWith("/")?n+="/":c.directory=n.endsWith("/");const u=Kr(e,c,"encodeText",we);let g=u(n);if(g===re&&(g=we(n)),en(g)>J)throw new f(Wr);const y=c.comment||"";let b=u(y);if(b===re&&(b=we(y)),en(b)>J)throw new f(Cr);const x=Kr(e,c,vr,20);if(x>J)throw new f(Nr);const S=Kr(e,c,Er,20);if(S>J)throw new f(Nr);const z=Kr(e,c,gr,new o),v=Kr(e,c,_r),E=Kr(e,c,yr),R=Kr(e,c,Sr,!0),D=Kr(e,c,br,0),T=Kr(e,c,xr,0),F=Kr(e,c,"passThrough");let A,C;F||(A=Kr(e,c,"password"),C=Kr(e,c,"rawPassword"));const W=Kr(e,c,"encryptionStrength",3),N=Kr(e,c,Rr),U=Kr(e,c,"extendedTimestamp",!0),I=Kr(e,c,"keepOrder",!0),L=Kr(e,c,"level"),O=Kr(e,c,"useWebWorkers"),H=Kr(e,c,"bufferedWrite"),M=Kr(e,c,"dataDescriptorSignature",!1),q=Kr(e,c,"signal"),P=Kr(e,c,"useUnicodeFileNames",!0),B=Kr(e,c,"useCompressionStream"),V=Kr(e,c,"compressionMethod");let Z=Kr(e,c,"dataDescriptor",!0),K=Kr(e,c,zr);if(!N&&(A!==re||C!==re)&&(1>W||W>3))throw new f(Ur);let j=new p;const{extraField:X}=c;if(X){let e=0,t=0;X.forEach((t=>e+=4+en(t))),j=new p(e),X.forEach(((e,r)=>{if(r>J)throw new f(Ir);if(en(e)>J)throw new f(Lr);Qr(j,new h([r]),t),Qr(j,new h([en(e)]),t+2),Qr(j,e,t+4),t+=4+en(e)}))}let Y=0,ne=0,se=0;if(F&&(({uncompressedSize:se}=c),se===re))throw new f(Hr);const ae=!0===K;l&&(l=ur(l),await dr(l),F?Y=jr(se):l.size===re?(Z=!0,(K||K===re)&&(K=!0,se=Y=4294967296)):(se=l.size,Y=jr(se)));const{diskOffset:ie,diskNumber:oe,maxSize:le}=e.writer,ce=ae||se>G,de=ae||Y>G,ue=ae||e.offset+e.pendingEntriesSize-ie>G,fe=Kr(e,c,"supportZip64SplitFile",!0)&&ae||oe+i.ceil(e.pendingEntriesSize/le)>J;if(ue||ce||de||fe){if(!1===K||!I)throw new f(Or);K=!0}K=K||!1;const pe=Kr(e,c,kr),{signature:he}=c,me=(e=>{const{rawFilename:t,lastModDate:r,lastAccessDate:n,creationDate:s,level:a,zip64:o,zipCrypto:l,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:f,encryptionStrength:h,extendedTimestamp:m,encrypted:g}=e,_=0!==a&&!u;let y,b,x,S,{version:z,compressionMethod:k}=e;if(g&&!l){y=new p(en(Mr)+2);const e=$r(y);Yr(e,0,39169),Qr(y,Mr,2),Xr(e,8,h)}else y=new p;if(m){x=new p(9+(n?4:0)+(s?4:0));const e=$r(x);Yr(e,0,21589),Yr(e,2,en(x)-4),S=1+(n?2:0)+(s?4:0),Xr(e,4,S);let t=5;Gr(e,t,i.floor(r.getTime()/1e3)),t+=4,n&&(Gr(e,t,i.floor(n.getTime()/1e3)),t+=4),s&&Gr(e,t,i.floor(s.getTime()/1e3));try{b=new p(36);const e=$r(b),t=Zr(r);Yr(e,0,10),Yr(e,2,32),Yr(e,8,1),Yr(e,10,24),Jr(e,12,t),Jr(e,20,Zr(n)||t),Jr(e,28,Zr(s)||t)}catch(e){b=new p}}else b=x=new p;let v=0;c&&(v|=2048),d&&(v|=8),k===re&&(k=_?8:0),_&&(a>=1&&3>a&&(v|=6),a>=3&&5>a&&(v|=1),9===a&&(v|=2)),o&&(z=z>45?z:45),g&&(v|=1,l||(z=z>51?z:51,y[9]=k,k=99));const E=new p(26),R=$r(E);Yr(R,0,z),Yr(R,2,v),Yr(R,4,k);const D=new w(1),T=$r(D);let F;F=te>r?te:r>ee?ee:r,Yr(T,0,(F.getHours()<<6|F.getMinutes())<<5|F.getSeconds()/2),Yr(T,2,(F.getFullYear()-1980<<4|F.getMonth()+1)<<5|F.getDate());const A=D[0];Gr(R,6,A),Yr(R,22,en(t));const C=en(y,x,b,f);Yr(R,24,C);const W=new p(30+en(t)+C);return Gr($r(W),0,67324752),Qr(W,E,4),Qr(W,t,30),Qr(W,y,30+en(t)),Qr(W,x,30+en(t,y)),Qr(W,b,30+en(t,y,x)),Qr(W,f,30+en(t,y,x,b)),{localHeaderArray:W,headerArray:E,headerView:R,lastModDate:r,rawLastModDate:A,encrypted:g,compressed:_,version:z,compressionMethod:k,extraFieldExtendedTimestampFlag:S,rawExtraFieldExtendedTimestamp:x,rawExtraFieldNTFS:b,rawExtraFieldAES:y,extraFieldLength:C}})(c=r.assign({},c,{rawFilename:g,rawComment:b,version:x,versionMadeBy:S,lastModDate:z,lastAccessDate:v,creationDate:E,rawExtraField:j,zip64:K,zip64UncompressedSize:ce,zip64CompressedSize:de,zip64Offset:ue,zip64DiskNumberStart:fe,password:A,rawPassword:C,level:B||e.config.CompressionStream!==re||e.config.CompressionStreamNative!==re?L:0,useWebWorkers:O,encryptionStrength:W,extendedTimestamp:U,zipCrypto:N,bufferedWrite:H,keepOrder:I,useUnicodeFileNames:P,dataDescriptor:Z,dataDescriptorSignature:M,signal:q,msDosCompatible:R,internalFileAttribute:D,externalFileAttribute:T,useCompressionStream:B,passThrough:F,encrypted:!!(A&&en(A)||C&&en(C))||F&&pe,signature:he,compressionMethod:V})),ge=(e=>{const{zip64:t,dataDescriptor:r,dataDescriptorSignature:n}=e;let s,a=new p,i=0;return r&&(a=new p(t?n?24:20:n?16:12),s=$r(a),n&&(i=4,Gr(s,0,$))),{dataDescriptorArray:a,dataDescriptorView:s,dataDescriptorOffset:i}})(c),_e=en(me.localHeaderArray,ge.dataDescriptorArray);let ye;ne=_e+Y,e.options.usdz&&(ne+=ne+64),e.pendingEntriesSize+=ne;try{ye=await(async(e,n,o,l,c)=>{const{files:u,writer:h}=e,{keepOrder:w,dataDescriptor:g,signal:y}=c,{headerInfo:b}=l,{usdz:x}=e.options,S=t.from(u.values()).pop();let z,v,E,R,D,T,F,A={};u.set(n,A);try{let t;w&&(t=S&&S.lock,A.lock=new _((e=>E=e))),!(c.bufferedWrite||e.writerLocked||e.bufferedWrites&&w)&&g||x?(T=h,await C()):(T=new k,F=new d(T.readable).blob(),T.writable.size=0,z=!0,e.bufferedWrites++,await dr(h)),await dr(T);const{writable:b}=h;let{diskOffset:v}=h;if(e.addSplitZipSignature){delete e.addSplitZipSignature;const t=new p(4);Gr($r(t),0,Q),await Vr(b,t),e.offset+=4}x&&((e,t)=>{const{headerInfo:r}=e;let{localHeaderArray:n,extraFieldLength:s}=r,a=$r(n),i=64-(t+en(n))%64;4>i&&(i+=64);const o=new p(i),l=$r(o);Yr(l,0,6534),Yr(l,2,i-2);const c=n;r.localHeaderArray=n=new p(en(c)+i),Qr(n,c),Qr(n,o,en(c)),a=$r(n),Yr(a,28,s+i),e.metadataSize+=i})(l,e.offset-v),z||(await t,await W(b));const{diskNumber:N}=h;if(D=!0,A.diskNumberStart=N,A=await(async(e,t,{diskNumberStart:n,lock:o},l,c,d)=>{const{headerInfo:u,dataDescriptorInfo:f,metadataSize:h}=l,{localHeaderArray:w,headerArray:m,lastModDate:g,rawLastModDate:y,encrypted:b,compressed:x,version:S,compressionMethod:z,rawExtraFieldExtendedTimestamp:k,extraFieldExtendedTimestampFlag:v,rawExtraFieldNTFS:E,rawExtraFieldAES:R}=u,{dataDescriptorArray:D}=f,{rawFilename:T,lastAccessDate:F,creationDate:A,password:C,rawPassword:W,level:N,zip64:U,zip64UncompressedSize:I,zip64CompressedSize:L,zip64Offset:O,zip64DiskNumberStart:H,zipCrypto:M,dataDescriptor:q,directory:P,versionMadeBy:B,rawComment:V,rawExtraField:Z,useWebWorkers:K,onstart:j,onprogress:X,onend:Y,signal:J,encryptionStrength:Q,extendedTimestamp:$,msDosCompatible:ee,internalFileAttribute:te,externalFileAttribute:ne,useCompressionStream:se,passThrough:ae}=d,ie={lock:o,versionMadeBy:B,zip64:U,directory:!!P,filenameUTF8:!0,rawFilename:T,commentUTF8:!0,rawComment:V,rawExtraFieldExtendedTimestamp:k,rawExtraFieldNTFS:E,rawExtraFieldAES:R,rawExtraField:Z,extendedTimestamp:$,msDosCompatible:ee,internalFileAttribute:te,externalFileAttribute:ne,diskNumberStart:n};let{signature:oe,uncompressedSize:le}=d,ce=0;ae||(le=0);const{writable:de}=t;if(e){e.chunkSize=(e=>i.max(e.chunkSize,64))(c),await Vr(de,w);const t=e.readable,r=t.size=e.size,n={options:{codecType:gt,level:N,rawPassword:W,password:C,encryptionStrength:Q,zipCrypto:b&&M,passwordVerification:b&&M&&y>>8&255,signed:!ae,compressed:x&&!ae,encrypted:b&&!ae,useWebWorkers:K,useCompressionStream:se,transferStreams:!1},config:c,streamOptions:{signal:J,size:r,onstart:j,onprogress:X,onend:Y}},a=await(async(e,t)=>{const{options:r,config:n}=t,{transferStreams:a,useWebWorkers:i,useCompressionStream:o,codecType:l,compressed:c,signed:d,encrypted:u}=r,{workerScripts:f,maxWorkers:p}=n;t.transferStreams=a||a===re;const h=!(c||d||u||t.transferStreams);return t.useWebWorkers=!h&&(i||i===re&&n.useWebWorkers),t.scripts=t.useWebWorkers&&f?f[l]:[],r.useCompressionStream=o||o===re&&n.useCompressionStream,(await(async()=>{const r=Tt.find((e=>!e.busy));if(r)return Ct(r),new xt(r,e,t,w);if(Tt.length<p){const r={indexWorker:At};return At++,Tt.push(r),new xt(r,e,t,w)}return new _((r=>Ft.push({resolve:r,stream:e,workerOptions:t})))})()).run();function w(e){if(Ft.length){const[{resolve:t,stream:r,workerOptions:n}]=Ft.splice(0,1);t(new xt(e,r,n,w))}else e.worker?(Ct(e),((e,t)=>{const{config:r}=t,{terminateWorkerTimeout:n}=r;s.isFinite(n)&&n>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout((async()=>{Tt=Tt.filter((t=>t!=e));try{await e.terminate()}catch(e){}}),n))})(e,t)):Tt=Tt.filter((t=>t!=e))}})({readable:t,writable:de},n);ce=a.outputSize,ae||(le=a.inputSize,oe=a.signature),de.size+=le}else await Vr(de,w);let ue;if(U){let e=4;I&&(e+=8),L&&(e+=8),O&&(e+=8),H&&(e+=4),ue=new p(e)}else ue=new p;return((e,t)=>{const{signature:r,rawExtraFieldZip64:n,compressedSize:s,uncompressedSize:i,headerInfo:o,dataDescriptorInfo:l}=e,{headerView:c,encrypted:d}=o,{dataDescriptorView:u,dataDescriptorOffset:f}=l,{zip64:p,zip64UncompressedSize:h,zip64CompressedSize:w,zipCrypto:m,dataDescriptor:g}=t;if(d&&!m||r===re||(Gr(c,10,r),g&&Gr(u,f,r)),p){const e=$r(n);Yr(e,0,1),Yr(e,2,en(n)-4);let t=4;h&&(Gr(c,18,G),Jr(e,t,a(i)),t+=8),w&&(Gr(c,14,G),Jr(e,t,a(s))),g&&(Jr(u,f+4,a(s)),Jr(u,f+12,a(i)))}else Gr(c,14,s),Gr(c,18,i),g&&(Gr(u,f+4,s),Gr(u,f+8,i))})({signature:oe,rawExtraFieldZip64:ue,compressedSize:ce,uncompressedSize:le,headerInfo:u,dataDescriptorInfo:f},d),q&&await Vr(de,D),r.assign(ie,{uncompressedSize:le,compressedSize:ce,lastModDate:g,rawLastModDate:y,creationDate:A,lastAccessDate:F,encrypted:b,zipCrypto:M,size:h+ce,compressionMethod:z,version:S,headerArray:m,signature:oe,rawExtraFieldZip64:ue,extraFieldExtendedTimestampFlag:v,zip64UncompressedSize:I,zip64CompressedSize:L,zip64Offset:O,zip64DiskNumberStart:H}),ie})(o,T,A,l,e.config,c),D=!1,u.set(n,A),A.filename=n,z){await T.writable.getWriter().close();let e=await F;await t,await C(),R=!0,g||(e=await(async(e,t,r,{zipCrypto:n})=>{let s;s=await t.slice(0,26).arrayBuffer(),26!=s.byteLength&&(s=s.slice(0,26));const a=new m(s);return e.encrypted&&!n||Gr(a,14,e.signature),e.zip64?(Gr(a,18,G),Gr(a,22,G)):(Gr(a,18,e.compressedSize),Gr(a,22,e.uncompressedSize)),await Vr(r,new p(s)),t.slice(s.byteLength)})(A,e,b,c)),await W(b),A.diskNumberStart=h.diskNumber,v=h.diskOffset,await e.stream().pipeTo(b,{preventClose:!0,preventAbort:!0,signal:y}),b.size+=e.size,R=!1}if(A.offset=e.offset-v,A.zip64)((e,t)=>{const{rawExtraFieldZip64:r,offset:n,diskNumberStart:s}=e,{zip64UncompressedSize:i,zip64CompressedSize:o,zip64Offset:l,zip64DiskNumberStart:c}=t,d=$r(r);let u=4;i&&(u+=8),o&&(u+=8),l&&(Jr(d,u,a(n)),u+=8),c&&Gr(d,u,s)})(A,c);else if(A.offset>G)throw new f(Or);return e.offset+=A.size,A}catch(t){if(z&&R||!z&&D){if(e.hasCorruptedEntries=!0,t)try{t.corruptedEntry=!0}catch(e){}z?e.offset+=T.writable.size:e.offset=T.writable.size}throw u.delete(n),t}finally{z&&e.bufferedWrites--,E&&E(),v&&v()}async function C(){e.writerLocked=!0;const{lockWriter:t}=e;e.lockWriter=new _((t=>v=()=>{e.writerLocked=!1,t()})),await t}async function W(e){en(b.localHeaderArray)>h.availableSize&&(h.availableSize=0,await Vr(e,new p))}})(e,n,l,{headerInfo:me,dataDescriptorInfo:ge,metadataSize:_e},c)}finally{e.pendingEntriesSize-=ne}return r.assign(ye,{name:n,comment:y,extraField:X}),new Tr(ye)})(c,e,n,l),u.add(y),await y}catch(t){throw c.filenames.delete(e),t}finally{u.delete(y);const e=Pr.shift();e?e():qr--}}async close(e=new p,r={}){const{pendingAddFileCalls:n,writer:s}=this,{writable:o}=s;for(;n.size;)await _.allSettled(t.from(n));return await(async(e,r,n)=>{const{files:s,writer:o}=e,{diskOffset:l,writable:c}=o;let{diskNumber:d}=o,u=0,h=0,w=e.offset-l,m=s.size;for(const[,e]of s){const{rawFilename:t,rawExtraFieldZip64:r,rawExtraFieldAES:n,rawComment:s,rawExtraFieldNTFS:a,rawExtraField:o,extendedTimestamp:l,extraFieldExtendedTimestampFlag:c,lastModDate:d}=e;let u;if(l){u=new p(9);const e=$r(u);Yr(e,0,21589),Yr(e,2,5),Xr(e,4,c),Gr(e,5,i.floor(d.getTime()/1e3))}else u=new p;e.rawExtraFieldCDExtendedTimestamp=u,h+=46+en(t,s,r,n,a,u,o)}const g=new p(h),_=$r(g);await dr(o);let y=0;for(const[e,r]of t.from(s.values()).entries()){const{offset:t,rawFilename:a,rawExtraFieldZip64:i,rawExtraFieldAES:l,rawExtraFieldCDExtendedTimestamp:d,rawExtraFieldNTFS:f,rawExtraField:p,rawComment:h,versionMadeBy:w,headerArray:m,directory:b,zip64:x,zip64UncompressedSize:S,zip64CompressedSize:z,zip64DiskNumberStart:k,zip64Offset:v,msDosCompatible:E,internalFileAttribute:R,externalFileAttribute:D,diskNumberStart:T,uncompressedSize:F,compressedSize:A}=r,C=en(i,l,d,f,p);Gr(_,u,33639248),Yr(_,u+4,w);const W=$r(m);S||Gr(W,18,F),z||Gr(W,14,A),Qr(g,m,u+6),Yr(_,u+30,C),Yr(_,u+32,en(h)),Yr(_,u+34,x&&k?J:T),Yr(_,u+36,R),D?Gr(_,u+38,D):b&&E&&Xr(_,u+38,16),Gr(_,u+42,x&&v?G:t),Qr(g,a,u+46),Qr(g,i,u+46+en(a)),Qr(g,l,u+46+en(a,i)),Qr(g,d,u+46+en(a,i,l)),Qr(g,f,u+46+en(a,i,l,d)),Qr(g,p,u+46+en(a,i,l,d,f)),Qr(g,h,u+46+en(a)+C);const N=46+en(a,h)+C;if(u-y>o.availableSize&&(o.availableSize=0,await Vr(c,g.slice(y,u)),y=u),u+=N,n.onprogress)try{await n.onprogress(e+1,s.size,new Tr(r))}catch(e){}}await Vr(c,y?g.slice(y):g);let b=o.diskNumber;const{availableSize:x}=o;22>x&&b++;let S=Kr(e,n,zr);if(w>G||h>G||m>J||b>J){if(!1===S)throw new f(Or);S=!0}const z=new p(S?98:22),k=$r(z);u=0,S&&(Gr(k,0,101075792),Jr(k,4,a(44)),Yr(k,12,45),Yr(k,14,45),Gr(k,16,b),Gr(k,20,d),Jr(k,24,a(m)),Jr(k,32,a(m)),Jr(k,40,a(h)),Jr(k,48,a(w)),Gr(k,56,117853008),Jr(k,64,a(w)+a(h)),Gr(k,72,b+1),Kr(e,n,"supportZip64SplitFile",!0)&&(b=J,d=J),m=J,w=G,h=G,u+=76),Gr(k,u,101010256),Yr(k,u+4,b),Yr(k,u+6,d),Yr(k,u+8,m),Yr(k,u+10,m),Gr(k,u+12,h),Gr(k,u+16,w);const v=en(r);if(v){if(v>J)throw new f(Ar);Yr(k,u+20,v)}await Vr(c,z),v&&await Vr(c,r)})(this,e,r),Kr(this,r,"preventClose")||await o.getWriter().close(),s.getData?s.getData():o}}async function Vr(e,t){const r=e.getWriter();try{await r.ready,e.size+=en(t),await r.write(t)}finally{r.releaseLock()}}function Zr(e){if(e)return(a(e.getTime())+a(116444736e5))*a(1e4)}function Kr(e,t,r,n){const s=t[r]===re?e.options[r]:t[r];return s===re?n:s}function jr(e){return e+5*(i.floor(e/16383)+1)}function Xr(e,t,r){e.setUint8(t,r)}function Yr(e,t,r){e.setUint16(t,r,!0)}function Gr(e,t,r){e.setUint32(t,r,!0)}function Jr(e,t,r){e.setBigUint64(t,r,!0)}function Qr(e,t,r){e.set(t,r)}function $r(e){return new m(e.buffer)}function en(...e){let t=0;return e.forEach((e=>e&&(t+=e.length))),t}de({Deflate:function(e){const t=new Y,r=(n=e&&e.chunkSize?e.chunkSize:65536)+5*(i.floor(n/16383)+1);var n;const s=new p(r);let a=e?e.level:-1;void 0===a&&(a=-1),t.deflateInit(a),t.next_out=s,this.append=(e,n)=>{let a,i,o=0,l=0,c=0;const d=[];if(e.length){t.next_in_index=0,t.next_in=e,t.avail_in=e.length;do{if(t.next_out_index=0,t.avail_out=r,a=t.deflate(0),0!=a)throw new f("deflating: "+t.msg);t.next_out_index&&(t.next_out_index==r?d.push(new p(s)):d.push(s.subarray(0,t.next_out_index))),c+=t.next_out_index,n&&t.next_in_index>0&&t.next_in_index!=o&&(n(t.next_in_index),o=t.next_in_index)}while(t.avail_in>0||0===t.avail_out);return d.length>1?(i=new p(c),d.forEach((e=>{i.set(e,l),l+=e.length}))):i=d[0]?new p(d[0]):new p,i}},this.flush=()=>{let e,n,a=0,i=0;const o=[];do{if(t.next_out_index=0,t.avail_out=r,e=t.deflate(4),1!=e&&0!=e)throw new f("deflating: "+t.msg);r-t.avail_out>0&&o.push(s.slice(0,t.next_out_index)),i+=t.next_out_index}while(t.avail_in>0||0===t.avail_out);return t.deflateEnd(),n=new p(i),o.forEach((e=>{n.set(e,a),a+=e.length})),n}}}),e.BlobReader=Kt,e.BlobWriter=jt,e.Data64URIReader=class extends Vt{constructor(e){super();let t=e.length;for(;"="==e.charAt(t-1);)t--;const n=e.indexOf(",")+1;r.assign(this,{dataURI:e,dataStart:n,size:i.floor(.75*(t-n))})}readUint8Array(e,t){const{dataStart:r,dataURI:n}=this,s=new p(t),a=4*i.floor(e/3),o=atob(n.substring(a+r,4*i.ceil((e+t)/3)+r)),l=e-3*i.floor(a/4);for(let e=l;l+t>e;e++)s[e-l]=o.charCodeAt(e);return s}},e.Data64URIWriter=class extends Zt{constructor(e){super(),r.assign(this,{data:"data:"+(e||"")+";base64,",pending:[]})}writeUint8Array(e){const t=this;let r=0,s=t.pending;const a=t.pending.length;for(t.pending="",r=0;r<3*i.floor((a+e.length)/3)-a;r++)s+=n.fromCharCode(e[r]);for(;r<e.length;r++)t.pending+=n.fromCharCode(e[r]);s.length>2?t.data+=z(s):t.pending=s}getData(){return this.data+z(this.pending)}},e.ERR_DUPLICATED_NAME=Fr,e.ERR_HTTP_RANGE=Nt,e.ERR_INVALID_COMMENT=Ar,e.ERR_INVALID_ENCRYPTION_STRENGTH=Ur,e.ERR_INVALID_ENTRY_COMMENT=Cr,e.ERR_INVALID_ENTRY_NAME=Wr,e.ERR_INVALID_EXTRAFIELD_DATA=Lr,e.ERR_INVALID_EXTRAFIELD_TYPE=Ir,e.ERR_INVALID_VERSION=Nr,e.ERR_ITERATOR_COMPLETED_TOO_SOON=Ut,e.ERR_UNDEFINED_UNCOMPRESSED_SIZE=Hr,e.ERR_UNSUPPORTED_FORMAT=Or,e.HttpRangeReader=class extends or{constructor(e,t={}){t.useRangeHeader=!0,super(e,t)}},e.HttpReader=or,e.Reader=Vt,e.SplitDataReader=lr,e.SplitDataWriter=cr,e.SplitZipReader=hr,e.SplitZipWriter=wr,e.TextReader=class extends Kt{constructor(e){super(new g([e],{type:"text/plain"}))}},e.TextWriter=class extends jt{constructor(e){super(e),r.assign(this,{encoding:e,utf8:!e||"utf-8"==e.toLowerCase()})}async getData(){const{encoding:e,utf8:t}=this,n=await super.getData();if(n.text&&t)return n.text();{const t=new FileReader;return new _(((s,a)=>{r.assign(t,{onload:({target:e})=>s(e.result),onerror:()=>a(t.error)}),t.readAsText(n,e)}))}}},e.Uint8ArrayReader=class extends Vt{constructor(e){super(),r.assign(this,{array:e,size:e.length})}readUint8Array(e,t){return this.array.slice(e,e+t)}},e.Uint8ArrayWriter=class extends Zt{init(e=0){r.assign(this,{offset:0,array:new p(e)}),super.init()}writeUint8Array(e){const t=this;if(t.offset+e.length>t.array.length){const r=t.array;t.array=new p(r.length+e.length),t.array.set(r)}t.array.set(e,t.offset),t.offset+=e.length}getData(){return this.array}},e.Writer=Zt,e.ZipWriter=Br,e.ZipWriterStream=class{constructor(e={}){const{readable:t,writable:r}=new k;this.readable=t,this.zipWriter=new Br(r,e)}transform(e){const{readable:t,writable:r}=new k({flush:()=>{this.zipWriter.close()}});return this.zipWriter.add(e,t),{readable:this.readable,writable:r}}writable(e){const{readable:t,writable:r}=new k;return this.zipWriter.add(e,t),r}close(e,t={}){return this.zipWriter.close(e,t)}},e.configure=de,e.getMimeType=()=>"application/octet-stream",e.initReader=ur,e.initStream=dr,e.initWriter=fr,e.readUint8Array=pr,e.terminateWorkers=async()=>{await _.allSettled(Tt.map((e=>(Ct(e),e.terminate()))))}}));

@@ -1,1 +0,1 @@

((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).zip={})})(this,(function(e){"use strict";const{Array:t,Object:n,String:i,Number:r,BigInt:a,Math:s,Date:o,Map:l,Set:c,Response:d,URL:u,Error:f,Uint8Array:h,Uint16Array:w,Uint32Array:_,DataView:p,Blob:b,Promise:g,TextEncoder:m,TextDecoder:y,document:x,crypto:k,btoa:v,TransformStream:S,ReadableStream:z,WritableStream:R,CompressionStream:D,DecompressionStream:T,navigator:E,Worker:A}="undefined"!=typeof globalThis?globalThis:this||self,C=0,F=1,U=-2,W=-3,L=-4,O=-5,I=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],N=1440,P=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],H=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],q=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],B=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],M=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],V=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],K=15;function Z(){let e,t,n,i,r,a;function s(e,t,s,o,l,c,d,u,f,h,w){let _,p,b,g,m,y,x,k,v,S,z,R,D,T,E;S=0,m=s;do{n[e[t+S]]++,S++,m--}while(0!==m);if(n[0]==s)return d[0]=-1,u[0]=0,C;for(k=u[0],y=1;K>=y&&0===n[y];y++);for(x=y,y>k&&(k=y),m=K;0!==m&&0===n[m];m--);for(b=m,k>m&&(k=m),u[0]=k,T=1<<y;m>y;y++,T<<=1)if(0>(T-=n[y]))return W;if(0>(T-=n[m]))return W;for(n[m]+=T,a[1]=y=0,S=1,D=2;0!=--m;)a[D]=y+=n[S],D++,S++;m=0,S=0;do{0!==(y=e[t+S])&&(w[a[y]++]=m),S++}while(++m<s);for(s=a[b],a[0]=m=0,S=0,g=-1,R=-k,r[0]=0,z=0,E=0;b>=x;x++)for(_=n[x];0!=_--;){for(;x>R+k;){if(g++,R+=k,E=b-R,E=E>k?k:E,(p=1<<(y=x-R))>_+1&&(p-=_+1,D=x,E>y))for(;++y<E&&(p<<=1)>n[++D];)p-=n[D];if(E=1<<y,h[0]+E>N)return W;r[g]=z=h[0],h[0]+=E,0!==g?(a[g]=m,i[0]=y,i[1]=k,y=m>>>R-k,i[2]=z-r[g-1]-y,f.set(i,3*(r[g-1]+y))):d[0]=z}for(i[1]=x-R,s>S?w[S]<o?(i[0]=256>w[S]?0:96,i[2]=w[S++]):(i[0]=c[w[S]-o]+16+64,i[2]=l[w[S++]-o]):i[0]=192,p=1<<x-R,y=m>>>R;E>y;y+=p)f.set(i,3*(z+y));for(y=1<<x-1;m&y;y>>>=1)m^=y;for(m^=y,v=(1<<R)-1;(m&v)!=a[g];)g--,R-=k,v=(1<<R)-1}return 0!==T&&1!=b?O:C}function o(s){let o;for(e||(e=[],t=[],n=new Int32Array(K+1),i=[],r=new Int32Array(K),a=new Int32Array(K+1)),t.length<s&&(t=[]),o=0;s>o;o++)t[o]=0;for(o=0;K+1>o;o++)n[o]=0;for(o=0;3>o;o++)i[o]=0;r.set(n.subarray(0,K),0),a.set(n.subarray(0,K+1),0)}this.inflate_trees_bits=(n,i,r,a,l)=>{let c;return o(19),e[0]=0,c=s(n,0,19,19,null,null,r,i,a,e,t),c==W?l.msg="oversubscribed dynamic bit lengths tree":c!=O&&0!==i[0]||(l.msg="incomplete dynamic bit lengths tree",c=W),c},this.inflate_trees_dynamic=(n,i,r,a,l,c,d,u,f)=>{let h;return o(288),e[0]=0,h=s(r,0,n,257,q,B,c,a,u,e,t),h!=C||0===a[0]?(h==W?f.msg="oversubscribed literal/length tree":h!=L&&(f.msg="incomplete literal/length tree",h=W),h):(o(288),h=s(r,n,i,0,M,V,d,l,u,e,t),h!=C||0===l[0]&&n>257?(h==W?f.msg="oversubscribed distance tree":h==O?(f.msg="incomplete distance tree",h=W):h!=L&&(f.msg="empty distance tree with lengths",h=W),h):C)}}Z.inflate_trees_fixed=(e,t,n,i)=>(e[0]=9,t[0]=5,n[0]=P,i[0]=H,C);const G=0,j=1,X=2,Y=3,J=4,Q=5,$=6,ee=7,te=8,ne=9;function ie(){const e=this;let t,n,i,r,a=0,s=0,o=0,l=0,c=0,d=0,u=0,f=0,h=0,w=0;function _(e,t,n,i,r,a,s,o){let l,c,d,u,f,h,w,_,p,b,g,m,y,x,k,v;w=o.next_in_index,_=o.avail_in,f=s.bitb,h=s.bitk,p=s.write,b=p<s.read?s.read-p-1:s.end-p,g=I[e],m=I[t];do{for(;20>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;if(l=f&g,c=n,d=i,v=3*(d+l),0!==(u=c[v]))for(;;){if(f>>=c[v+1],h-=c[v+1],16&u){for(u&=15,y=c[v+2]+(f&I[u]),f>>=u,h-=u;15>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;for(l=f&m,c=r,d=a,v=3*(d+l),u=c[v];;){if(f>>=c[v+1],h-=c[v+1],16&u){for(u&=15;u>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;if(x=c[v+2]+(f&I[u]),f>>=u,h-=u,b-=y,x>p){k=p-x;do{k+=s.end}while(0>k);if(u=s.end-k,y>u){if(y-=u,p-k>0&&u>p-k)do{s.win[p++]=s.win[k++]}while(0!=--u);else s.win.set(s.win.subarray(k,k+u),p),p+=u,k+=u,u=0;k=0}}else k=p-x,p-k>0&&2>p-k?(s.win[p++]=s.win[k++],s.win[p++]=s.win[k++],y-=2):(s.win.set(s.win.subarray(k,k+2),p),p+=2,k+=2,y-=2);if(p-k>0&&y>p-k)do{s.win[p++]=s.win[k++]}while(0!=--y);else s.win.set(s.win.subarray(k,k+y),p),p+=y,k+=y,y=0;break}if(64&u)return o.msg="invalid distance code",y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,W;l+=c[v+2],l+=f&I[u],v=3*(d+l),u=c[v]}break}if(64&u)return 32&u?(y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,F):(o.msg="invalid literal/length code",y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,W);if(l+=c[v+2],l+=f&I[u],v=3*(d+l),0===(u=c[v])){f>>=c[v+1],h-=c[v+1],s.win[p++]=c[v+2],b--;break}}else f>>=c[v+1],h-=c[v+1],s.win[p++]=c[v+2],b--}while(b>=258&&_>=10);return y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,C}e.init=(e,a,s,o,l,c)=>{t=G,u=e,f=a,i=s,h=o,r=l,w=c,n=null},e.proc=(e,p,b)=>{let g,m,y,x,k,v,S,z=0,R=0,D=0;for(D=p.next_in_index,x=p.avail_in,z=e.bitb,R=e.bitk,k=e.write,v=k<e.read?e.read-k-1:e.end-k;;)switch(t){case G:if(v>=258&&x>=10&&(e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,b=_(u,f,i,h,r,w,e,p),D=p.next_in_index,x=p.avail_in,z=e.bitb,R=e.bitk,k=e.write,v=k<e.read?e.read-k-1:e.end-k,b!=C)){t=b==F?ee:ne;break}o=u,n=i,s=h,t=j;case j:for(g=o;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}if(m=3*(s+(z&I[g])),z>>>=n[m+1],R-=n[m+1],y=n[m],0===y){l=n[m+2],t=$;break}if(16&y){c=15&y,a=n[m+2],t=X;break}if(!(64&y)){o=y,s=m/3+n[m+2];break}if(32&y){t=ee;break}return t=ne,p.msg="invalid literal/length code",b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case X:for(g=c;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}a+=z&I[g],z>>=g,R-=g,o=f,n=r,s=w,t=Y;case Y:for(g=o;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}if(m=3*(s+(z&I[g])),z>>=n[m+1],R-=n[m+1],y=n[m],16&y){c=15&y,d=n[m+2],t=J;break}if(!(64&y)){o=y,s=m/3+n[m+2];break}return t=ne,p.msg="invalid distance code",b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case J:for(g=c;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}d+=z&I[g],z>>=g,R-=g,t=Q;case Q:for(S=k-d;0>S;)S+=e.end;for(;0!==a;){if(0===v&&(k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v&&(e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v)))return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);e.win[k++]=e.win[S++],v--,S==e.end&&(S=0),a--}t=G;break;case $:if(0===v&&(k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v&&(e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v)))return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,e.win[k++]=l,v--,t=G;break;case ee:if(R>7&&(R-=8,x++,D--),e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,e.read!=e.write)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);t=te;case te:return b=F,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case ne:return b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);default:return b=U,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b)}},e.free=()=>{}}const re=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ae=0,se=1,oe=2,le=3,ce=4,de=5,ue=6,fe=7,he=8,we=9;function _e(e,t){const n=this;let i,r=ae,a=0,s=0,o=0;const l=[0],c=[0],d=new ie;let u=0,f=new Int32Array(3*N);const w=new Z;n.bitk=0,n.bitb=0,n.win=new h(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),r==ue&&d.free(e),r=ae,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=(e,t)=>{let i,r,a;return r=e.next_out_index,a=n.read,i=(a>n.write?n.end:n.write)-a,i>e.avail_out&&(i=e.avail_out),0!==i&&t==O&&(t=C),e.avail_out-=i,e.total_out+=i,e.next_out.set(n.win.subarray(a,a+i),r),r+=i,a+=i,a==n.end&&(a=0,n.write==n.end&&(n.write=0),i=n.write-a,i>e.avail_out&&(i=e.avail_out),0!==i&&t==O&&(t=C),e.avail_out-=i,e.total_out+=i,e.next_out.set(n.win.subarray(a,a+i),r),r+=i,a+=i),e.next_out_index=r,n.read=a,t},n.proc=(e,t)=>{let h,_,p,b,g,m,y,x;for(b=e.next_in_index,g=e.avail_in,_=n.bitb,p=n.bitk,m=n.write,y=m<n.read?n.read-m-1:n.end-m;;){let k,v,S,z,R,D,T,E;switch(r){case ae:for(;3>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}switch(h=7&_,u=1&h,h>>>1){case 0:_>>>=3,p-=3,h=7&p,_>>>=h,p-=h,r=se;break;case 1:k=[],v=[],S=[[]],z=[[]],Z.inflate_trees_fixed(k,v,S,z),d.init(k[0],v[0],S[0],0,z[0],0),_>>>=3,p-=3,r=ue;break;case 2:_>>>=3,p-=3,r=le;break;case 3:return _>>>=3,p-=3,r=we,e.msg="invalid block type",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t)}break;case se:for(;32>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if((~_>>>16&65535)!=(65535&_))return r=we,e.msg="invalid stored block lengths",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);a=65535&_,_=p=0,r=0!==a?oe:0!==u?fe:ae;break;case oe:if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(0===y&&(m==n.end&&0!==n.read&&(m=0,y=m<n.read?n.read-m-1:n.end-m),0===y&&(n.write=m,t=n.inflate_flush(e,t),m=n.write,y=m<n.read?n.read-m-1:n.end-m,m==n.end&&0!==n.read&&(m=0,y=m<n.read?n.read-m-1:n.end-m),0===y)))return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(t=C,h=a,h>g&&(h=g),h>y&&(h=y),n.win.set(e.read_buf(b,h),m),b+=h,g-=h,m+=h,y-=h,0!=(a-=h))break;r=0!==u?fe:ae;break;case le:for(;14>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(s=h=16383&_,(31&h)>29||(h>>5&31)>29)return r=we,e.msg="too many length or distance symbols",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(h=258+(31&h)+(h>>5&31),!i||i.length<h)i=[];else for(x=0;h>x;x++)i[x]=0;_>>>=14,p-=14,o=0,r=ce;case ce:for(;4+(s>>>10)>o;){for(;3>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}i[re[o++]]=7&_,_>>>=3,p-=3}for(;19>o;)i[re[o++]]=0;if(l[0]=7,h=w.inflate_trees_bits(i,l,c,f,e),h!=C)return(t=h)==W&&(i=null,r=we),n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);o=0,r=de;case de:for(;h=s,258+(31&h)+(h>>5&31)>o;){let a,d;for(h=l[0];h>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(h=f[3*(c[0]+(_&I[h]))+1],d=f[3*(c[0]+(_&I[h]))+2],16>d)_>>>=h,p-=h,i[o++]=d;else{for(x=18==d?7:d-14,a=18==d?11:3;h+x>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(_>>>=h,p-=h,a+=_&I[x],_>>>=x,p-=x,x=o,h=s,x+a>258+(31&h)+(h>>5&31)||16==d&&1>x)return i=null,r=we,e.msg="invalid bit length repeat",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);d=16==d?i[x-1]:0;do{i[x++]=d}while(0!=--a);o=x}}if(c[0]=-1,R=[],D=[],T=[],E=[],R[0]=9,D[0]=6,h=s,h=w.inflate_trees_dynamic(257+(31&h),1+(h>>5&31),i,R,D,T,E,f,e),h!=C)return h==W&&(i=null,r=we),t=h,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);d.init(R[0],D[0],f,T[0],f,E[0]),r=ue;case ue:if(n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,(t=d.proc(n,e,t))!=F)return n.inflate_flush(e,t);if(t=C,d.free(e),b=e.next_in_index,g=e.avail_in,_=n.bitb,p=n.bitk,m=n.write,y=m<n.read?n.read-m-1:n.end-m,0===u){r=ae;break}r=fe;case fe:if(n.write=m,t=n.inflate_flush(e,t),m=n.write,y=m<n.read?n.read-m-1:n.end-m,n.read!=n.write)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);r=he;case he:return t=F,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);case we:return t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);default:return t=U,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t)}}},n.free=e=>{n.reset(e,null),n.win=null,f=null},n.set_dictionary=(e,t,i)=>{n.win.set(e.subarray(t,t+i),0),n.read=n.write=i},n.sync_point=()=>r==se?1:0}const pe=13,be=[0,0,255,255];function ge(){const e=this;function t(e){return e&&e.istate?(e.total_in=e.total_out=0,e.msg=null,e.istate.mode=7,e.istate.blocks.reset(e,null),C):U}e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0,e.inflateEnd=t=>(e.blocks&&e.blocks.free(t),e.blocks=null,C),e.inflateInit=(n,i)=>(n.msg=null,e.blocks=null,8>i||i>15?(e.inflateEnd(n),U):(e.wbits=i,n.istate.blocks=new _e(n,1<<i),t(n),C)),e.inflate=(e,t)=>{let n,i;if(!e||!e.istate||!e.next_in)return U;const r=e.istate;for(t=4==t?O:C,n=O;;)switch(r.mode){case 0:if(0===e.avail_in)return n;if(n=t,e.avail_in--,e.total_in++,8!=(15&(r.method=e.read_byte(e.next_in_index++)))){r.mode=pe,e.msg="unknown compression method",r.marker=5;break}if(8+(r.method>>4)>r.wbits){r.mode=pe,e.msg="invalid win size",r.marker=5;break}r.mode=1;case 1:if(0===e.avail_in)return n;if(n=t,e.avail_in--,e.total_in++,i=255&e.read_byte(e.next_in_index++),((r.method<<8)+i)%31!=0){r.mode=pe,e.msg="incorrect header check",r.marker=5;break}if(!(32&i)){r.mode=7;break}r.mode=2;case 2:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need=(255&e.read_byte(e.next_in_index++))<<24&4278190080,r.mode=3;case 3:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need+=(255&e.read_byte(e.next_in_index++))<<16&16711680,r.mode=4;case 4:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need+=(255&e.read_byte(e.next_in_index++))<<8&65280,r.mode=5;case 5:return 0===e.avail_in?n:(n=t,e.avail_in--,e.total_in++,r.need+=255&e.read_byte(e.next_in_index++),r.mode=6,2);case 6:return r.mode=pe,e.msg="need dictionary",r.marker=0,U;case 7:if(n=r.blocks.proc(e,n),n==W){r.mode=pe,r.marker=0;break}if(n==C&&(n=t),n!=F)return n;n=t,r.blocks.reset(e,r.was),r.mode=12;case 12:return e.avail_in=0,F;case pe:return W;default:return U}},e.inflateSetDictionary=(e,t,n)=>{let i=0,r=n;if(!e||!e.istate||6!=e.istate.mode)return U;const a=e.istate;return r<1<<a.wbits||(r=(1<<a.wbits)-1,i=n-r),a.blocks.set_dictionary(t,i,r),a.mode=7,C},e.inflateSync=e=>{let n,i,r,a,s;if(!e||!e.istate)return U;const o=e.istate;if(o.mode!=pe&&(o.mode=pe,o.marker=0),0===(n=e.avail_in))return O;for(i=e.next_in_index,r=o.marker;0!==n&&4>r;)e.read_byte(i)==be[r]?r++:r=0!==e.read_byte(i)?0:4-r,i++,n--;return e.total_in+=i-e.next_in_index,e.next_in_index=i,e.avail_in=n,o.marker=r,4!=r?W:(a=e.total_in,s=e.total_out,t(e),e.total_in=a,e.total_out=s,o.mode=7,C)},e.inflateSyncPoint=e=>e&&e.istate&&e.istate.blocks?e.istate.blocks.sync_point():U}function me(){}me.prototype={inflateInit(e){const t=this;return t.istate=new ge,e||(e=15),t.istate.inflateInit(t,e)},inflate(e){const t=this;return t.istate?t.istate.inflate(t,e):U},inflateEnd(){const e=this;if(!e.istate)return U;const t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync(){const e=this;return e.istate?e.istate.inflateSync(e):U},inflateSetDictionary(e,t){const n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):U},read_byte(e){return this.next_in[e]},read_buf(e,t){return this.next_in.subarray(e,e+t)}};const ye=4294967295,xe=65535,ke=33639248,ve=101075792,Se=22,ze=void 0,Re="undefined",De="function";class Te{constructor(e){return class extends S{constructor(t,n){const i=new e(n);super({transform(e,t){t.enqueue(i.append(e))},flush(e){const t=i.flush();t&&e.enqueue(t)}})}}}}let Ee=2;try{typeof E!=Re&&E.hardwareConcurrency&&(Ee=E.hardwareConcurrency)}catch(e){}const Ae={chunkSize:524288,maxWorkers:Ee,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:ze,CompressionStreamNative:typeof D!=Re&&D,DecompressionStreamNative:typeof T!=Re&&T},Ce=n.assign({},Ae);function Fe(){return Ce}function Ue(e){const{baseURL:n,chunkSize:i,maxWorkers:r,terminateWorkerTimeout:a,useCompressionStream:s,useWebWorkers:o,Deflate:l,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:h}=e;if(We("baseURL",n),We("chunkSize",i),We("maxWorkers",r),We("terminateWorkerTimeout",a),We("useCompressionStream",s),We("useWebWorkers",o),l&&(Ce.CompressionStream=new Te(l)),c&&(Ce.DecompressionStream=new Te(c)),We("CompressionStream",d),We("DecompressionStream",u),h!==ze){const{deflate:e,inflate:n}=h;if((e||n)&&(Ce.workerScripts||(Ce.workerScripts={})),e){if(!t.isArray(e))throw new f("workerScripts.deflate must be an array");Ce.workerScripts.deflate=e}if(n){if(!t.isArray(n))throw new f("workerScripts.inflate must be an array");Ce.workerScripts.inflate=n}}}function We(e,t){t!==ze&&(Ce[e]=t)}const Le=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;Le[e]=t}class Oe{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,i=0|e.length;i>n;n++)t=t>>>8^Le[255&(t^e[n])];this.crc=t}get(){return~this.crc}}class Ie extends S{constructor(){let e;const t=new Oe;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new h(4);new p(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const Ne={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],i=Ne.getPartial(n);return 32===i?e.concat(t):Ne._shiftRight(t,i,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+Ne.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,s.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=Ne.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>s.round(e/1099511627776)||32,_shiftRight(e,t,n,i){for(void 0===i&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(0===t)return i.concat(e);for(let r=0;r<e.length;r++)i.push(n|e[r]>>>t),n=e[r]<<32-t;const r=e.length?e[e.length-1]:0,a=Ne.getPartial(r);return i.push(Ne.partial(t+a&31,t+a>32?n:i.pop(),1)),i}},Pe={bytes:{fromBits(e){const t=Ne.bitLength(e)/8,n=new h(t);let i;for(let r=0;t>r;r++)3&r||(i=e[r/4]),n[r]=i>>>24,i<<=8;return n},toBits(e){const t=[];let n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],3&~n||(t.push(i),i=0);return 3&n&&t.push(Ne.partial(8*(3&n),i)),t}}},He=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=Pe.utf8String.toBits(e));const n=t._buffer=Ne.concat(t._buffer,e),i=t._length,r=t._length=i+Ne.bitLength(e);if(r>9007199254740991)throw new f("Cannot hash more than 2^53 - 1 bits");const a=new _(n);let s=0;for(let e=t.blockSize+i-(t.blockSize+i&t.blockSize-1);r>=e;e+=t.blockSize)t._block(a.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=Ne.concat(t,[Ne.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(s.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,i){return e>19?e>39?e>59?e>79?void 0:t^n^i:t&n|t&i|n&i:t^n^i:t&n|~t&i}_S(e,t){return t<<e|t>>>32-e}_block(e){const n=this,i=n._h,r=t(80);for(let t=0;16>t;t++)r[t]=e[t];let a=i[0],o=i[1],l=i[2],c=i[3],d=i[4];for(let e=0;79>=e;e++){16>e||(r[e]=n._S(1,r[e-3]^r[e-8]^r[e-14]^r[e-16]));const t=n._S(5,a)+n._f(e,o,l,c)+d+r[e]+n._key[s.floor(e/20)]|0;d=c,c=l,l=n._S(30,o),o=a,a=t}i[0]=i[0]+a|0,i[1]=i[1]+o|0,i[2]=i[2]+l|0,i[3]=i[3]+c|0,i[4]=i[4]+d|0}},qe={getRandomValues(e){const t=new _(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(s.random()>.5?1:-1))};for(let i,r=0;r<e.length;r+=4){const e=n(4294967296*(i||s.random()));i=987654071*e(),t[r/4]=4294967296*e()|0}return e}},Be={importKey:e=>new Be.hmacSha1(Pe.bytes.toBits(e)),pbkdf2(e,t,n,i){if(n=n||1e4,0>i||0>n)throw new f("invalid params to pbkdf2");const r=1+(i>>5)<<2;let a,s,o,l,c;const d=new ArrayBuffer(r),u=new p(d);let h=0;const w=Ne;for(t=Pe.bytes.toBits(t),c=1;(r||1)>h;c++){for(a=s=e.encrypt(w.concat(t,[c])),o=1;n>o;o++)for(s=e.encrypt(s),l=0;l<s.length;l++)a[l]^=s[l];for(o=0;(r||1)>h&&o<a.length;o++)u.setInt32(h,a[o]),h+=4}return d.slice(0,i/8)},hmacSha1:class{constructor(e){const t=this,n=t._hash=He,i=[[],[]];t._baseHash=[new n,new n];const r=t._baseHash[0].blockSize/32;e.length>r&&(e=(new n).update(e).finalize());for(let t=0;r>t;t++)i[0][t]=909522486^e[t],i[1][t]=1549556828^e[t];t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new f("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},Me=typeof k!=Re&&typeof k.getRandomValues==De,Ve="Invalid password",Ke="Invalid signature",Ze="zipjs-abort-check-password";function Ge(e){return Me?k.getRandomValues(e):qe.getRandomValues(e)}const je=16,Xe={name:"PBKDF2"},Ye=n.assign({hash:{name:"HMAC"}},Xe),Je=n.assign({iterations:1e3,hash:{name:"SHA-1"}},Xe),Qe=["deriveBits"],$e=[8,12,16],et=[16,24,32],tt=10,nt=[0,0,0,0],it=typeof k!=Re,rt=it&&k.subtle,at=it&&typeof rt!=Re,st=Pe.bytes,ot=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],i=t._tables[1],r=e.length;let a,s,o,l=1;if(4!==r&&6!==r&&8!==r)throw new f("invalid aes key size");for(t._key=[s=e.slice(0),o=[]],a=r;4*r+28>a;a++){let e=s[a-1];(a%r==0||8===r&&a%r==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],a%r==0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),s[a]=s[a-r]^e}for(let e=0;a;e++,a--){const t=s[3&e?a:a-4];o[e]=4>=a||4>e?t:i[0][n[t>>>24]]^i[1][n[t>>16&255]]^i[2][n[t>>8&255]]^i[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],r=[],a=[];let s,o,l,c;for(let e=0;256>e;e++)a[(r[e]=e<<1^283*(e>>7))^e]=e;for(let d=s=0;!n[d];d^=o||1,s=a[s]||1){let a=s^s<<1^s<<2^s<<3^s<<4;a=a>>8^255&a^99,n[d]=a,i[a]=d,c=r[l=r[o=r[d]]];let u=16843009*c^65537*l^257*o^16843008*d,f=257*r[a]^16843008*a;for(let n=0;4>n;n++)e[n][d]=f=f<<24^f>>>8,t[n][a]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new f("invalid aes block size");const n=this._key[t],i=n.length/4-2,r=[0,0,0,0],a=this._tables[t],s=a[0],o=a[1],l=a[2],c=a[3],d=a[4];let u,h,w,_=e[0]^n[0],p=e[t?3:1]^n[1],b=e[2]^n[2],g=e[t?1:3]^n[3],m=4;for(let e=0;i>e;e++)u=s[_>>>24]^o[p>>16&255]^l[b>>8&255]^c[255&g]^n[m],h=s[p>>>24]^o[b>>16&255]^l[g>>8&255]^c[255&_]^n[m+1],w=s[b>>>24]^o[g>>16&255]^l[_>>8&255]^c[255&p]^n[m+2],g=s[g>>>24]^o[_>>16&255]^l[p>>8&255]^c[255&b]^n[m+3],m+=4,_=u,p=h,b=w;for(let e=0;4>e;e++)r[t?3&-e:e]=d[_>>>24]<<24^d[p>>16&255]<<16^d[b>>8&255]<<8^d[255&g]^n[m++],u=_,_=p,p=b,b=g,g=u;return r}},lt=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,i=255&e;255===t?(t=0,255===n?(n=0,255===i?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];const r=Ne.bitLength(t);for(let r=0;i>r;r+=4){this.incCounter(n);const i=e.encrypt(n);t[r]^=i[0],t[r+1]^=i[1],t[r+2]^=i[2],t[r+3]^=i[3]}return Ne.clamp(t,r)}},ct=Be.hmacSha1;let dt=it&&at&&typeof rt.importKey==De,ut=it&&at&&typeof rt.deriveBits==De;class ft extends S{constructor({password:e,rawPassword:t,signed:i,encryptionStrength:r,checkPasswordOnly:a}){super({start(){n.assign(this,{ready:new g((e=>this.resolveReady=e)),password:pt(e,t),signed:i,strength:r-1,pending:new h})},async transform(e,t){const n=this,{password:i,strength:r,resolveReady:s,ready:o}=n;i?(await(async(e,t,n,i)=>{const r=await _t(e,t,n,gt(i,0,$e[t])),a=gt(i,$e[t]);if(r[0]!=a[0]||r[1]!=a[1])throw new f(Ve)})(n,r,i,gt(e,0,$e[r]+2)),e=gt(e,$e[r]+2),a?t.error(new f(Ze)):s()):await o;const l=new h(e.length-tt-(e.length-tt)%je);t.enqueue(wt(n,e,l,0,tt,!0))},async flush(e){const{signed:t,ctr:n,hmac:i,pending:r,ready:a}=this;if(i&&n){await a;const s=gt(r,0,r.length-tt),o=gt(r,r.length-tt);let l=new h;if(s.length){const e=yt(st,s);i.update(e);const t=n.update(e);l=mt(st,t)}if(t){const e=gt(mt(st,i.digest()),0,tt);for(let t=0;tt>t;t++)if(e[t]!=o[t])throw new f(Ke)}e.enqueue(l)}}})}}class ht extends S{constructor({password:e,rawPassword:t,encryptionStrength:i}){let r;super({start(){n.assign(this,{ready:new g((e=>this.resolveReady=e)),password:pt(e,t),strength:i-1,pending:new h})},async transform(e,t){const n=this,{password:i,strength:r,resolveReady:a,ready:s}=n;let o=new h;i?(o=await(async(e,t,n)=>{const i=Ge(new h($e[t]));return bt(i,await _t(e,t,n,i))})(n,r,i),a()):await s;const l=new h(o.length+e.length-e.length%je);l.set(o,0),t.enqueue(wt(n,e,l,o.length,0))},async flush(e){const{ctr:t,hmac:n,pending:i,ready:a}=this;if(n&&t){await a;let s=new h;if(i.length){const e=t.update(yt(st,i));n.update(e),s=mt(st,e)}r.signature=mt(st,n.digest()).slice(0,tt),e.enqueue(bt(s,r.signature))}}}),r=this}}function wt(e,t,n,i,r,a){const{ctr:s,hmac:o,pending:l}=e,c=t.length-r;let d;for(l.length&&(t=bt(l,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new h(t)).set(n,0)}return e})(n,c-c%je)),d=0;c-je>=d;d+=je){const e=yt(st,gt(t,d,d+je));a&&o.update(e);const r=s.update(e);a||o.update(r),n.set(mt(st,r),d+i)}return e.pending=gt(t,d),n}async function _t(e,i,r,a){e.password=null;const s=await(async(e,t,n,i,r)=>{if(!dt)return Be.importKey(t);try{return await rt.importKey("raw",t,n,!1,r)}catch(e){return dt=!1,Be.importKey(t)}})(0,r,Ye,0,Qe),o=await(async(e,t,n)=>{if(!ut)return Be.pbkdf2(t,e.salt,Je.iterations,n);try{return await rt.deriveBits(e,t,n)}catch(i){return ut=!1,Be.pbkdf2(t,e.salt,Je.iterations,n)}})(n.assign({salt:a},Je),s,8*(2*et[i]+2)),l=new h(o),c=yt(st,gt(l,0,et[i])),d=yt(st,gt(l,et[i],2*et[i])),u=gt(l,2*et[i]);return n.assign(e,{keys:{key:c,authentication:d,passwordVerification:u},ctr:new lt(new ot(c),t.from(nt)),hmac:new ct(d)}),u}function pt(e,t){return t===ze?(e=>{if(typeof m==Re){const t=new h((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new m).encode(e)})(e):t}function bt(e,t){let n=e;return e.length+t.length&&(n=new h(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function gt(e,t,n){return e.subarray(t,n)}function mt(e,t){return e.fromBits(t)}function yt(e,t){return e.toBits(t)}class xt extends S{constructor({password:e,passwordVerification:t,checkPasswordOnly:i}){super({start(){n.assign(this,{password:e,passwordVerification:t}),zt(this,e)},transform(e,t){const n=this;if(n.password){const t=vt(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new f(Ve);e=e.subarray(12)}i?t.error(new f(Ze)):t.enqueue(vt(n,e))}})}}class kt extends S{constructor({password:e,passwordVerification:t}){super({start(){n.assign(this,{password:e,passwordVerification:t}),zt(this,e)},transform(e,t){const n=this;let i,r;if(n.password){n.password=null;const t=Ge(new h(12));t[11]=n.passwordVerification,i=new h(e.length+t.length),i.set(St(n,t),0),r=12}else i=new h(e.length),r=0;i.set(St(n,e),r),t.enqueue(i)}})}}function vt(e,t){const n=new h(t.length);for(let i=0;i<t.length;i++)n[i]=Dt(e)^t[i],Rt(e,n[i]);return n}function St(e,t){const n=new h(t.length);for(let i=0;i<t.length;i++)n[i]=Dt(e)^t[i],Rt(e,t[i]);return n}function zt(e,t){const i=[305419896,591751049,878082192];n.assign(e,{keys:i,crcKey0:new Oe(i[0]),crcKey2:new Oe(i[2])});for(let n=0;n<t.length;n++)Rt(e,t.charCodeAt(n))}function Rt(e,t){let[n,i,r]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=Et(s.imul(Et(i+Tt(n)),134775813)+1),e.crcKey2.append([i>>>24]),r=~e.crcKey2.get(),e.keys=[n,i,r]}function Dt(e){const t=2|e.keys[2];return Tt(s.imul(t,1^t)>>>8)}function Tt(e){return 255&e}function Et(e){return 4294967295&e}const At="deflate-raw";class Ct extends S{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:i}){super({});const{compressed:r,encrypted:a,useCompressionStream:s,zipCrypto:o,signed:l,level:c}=e,d=this;let u,f,h=Ut(super.readable);a&&!o||!l||(u=new Ie,h=Ot(h,u)),r&&(h=Lt(h,s,{level:c,chunkSize:t},i,n)),a&&(o?h=Ot(h,new kt(e)):(f=new ht(e),h=Ot(h,f))),Wt(d,h,(()=>{let e;a&&!o&&(e=f.signature),a&&!o||!l||(e=new p(u.value.buffer).getUint32(0)),d.signature=e}))}}class Ft extends S{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:i}){super({});const{zipCrypto:r,encrypted:a,signed:s,signature:o,compressed:l,useCompressionStream:c}=e;let d,u,h=Ut(super.readable);a&&(r?h=Ot(h,new xt(e)):(u=new ft(e),h=Ot(h,u))),l&&(h=Lt(h,c,{chunkSize:t},i,n)),a&&!r||!s||(d=new Ie,h=Ot(h,d)),Wt(this,h,(()=>{if((!a||r)&&s){const e=new p(d.value.buffer);if(o!=e.getUint32(0,!1))throw new f(Ke)}}))}}function Ut(e){return Ot(e,new S({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function Wt(e,t,i){t=Ot(t,new S({flush:i})),n.defineProperty(e,"readable",{get:()=>t})}function Lt(e,t,n,i,r){try{e=Ot(e,new(t&&i?i:r)(At,n))}catch(i){if(!t)return e;try{e=Ot(e,new r(At,n))}catch(t){return e}}return e}function Ot(e,t){return e.pipeThrough(t)}const It="data",Nt="close",Pt="inflate";class Ht extends S{constructor(e,t){super({});const i=this,{codecType:r}=e;let a;r.startsWith("deflate")?a=Ct:r.startsWith(Pt)&&(a=Ft);let s=0,o=0;const l=new a(e,t),c=super.readable,d=new S({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){n.assign(i,{inputSize:o})}}),u=new S({transform(e,t){e&&e.length&&(s+=e.length,t.enqueue(e))},flush(){const{signature:e}=l;n.assign(i,{signature:e,outputSize:s,inputSize:o})}});n.defineProperty(i,"readable",{get:()=>c.pipeThrough(d).pipeThrough(l).pipeThrough(u)})}}class qt extends S{constructor(e){let t;super({transform:function n(i,r){if(t){const e=new h(t.length+i.length);e.set(t),e.set(i,t.length),i=e,t=null}i.length>e?(r.enqueue(i.slice(0,e)),n(i.slice(e),r)):t=i},flush(e){t&&t.length&&e.enqueue(t)}})}}let Bt=typeof A!=Re;class Mt{constructor(e,{readable:t,writable:i},{options:r,config:a,streamOptions:s,useWebWorkers:o,transferStreams:l,scripts:c},d){const{signal:u}=s;return n.assign(e,{busy:!0,readable:t.pipeThrough(new qt(a.chunkSize)).pipeThrough(new Vt(t,s),{signal:u}),writable:i,options:n.assign({},r),scripts:c,transferStreams:l,terminate:()=>new g((t=>{const{worker:n,busy:i}=e;n?(i?e.resolveTerminated=t:(n.terminate(),t()),e.interface=null):t()})),onTaskFinished(){const{resolveTerminated:t}=e;t&&(e.resolveTerminated=null,e.terminated=!0,e.worker.terminate(),t()),e.busy=!1,d(e)}}),(o&&Bt?Gt:Zt)(e,a)}}class Vt extends S{constructor(e,{onstart:t,onprogress:n,size:i,onend:r}){let a=0;super({async start(){t&&await Kt(t,i)},async transform(e,t){a+=e.length,n&&await Kt(n,a,i),t.enqueue(e)},async flush(){e.size=a,r&&await Kt(r,a)}})}}async function Kt(e,...t){try{await e(...t)}catch(e){}}function Zt(e,t){return{run:()=>(async({options:e,readable:t,writable:n,onTaskFinished:i},r)=>{try{const i=new Ht(e,r);await t.pipeThrough(i).pipeTo(n,{preventClose:!0,preventAbort:!0});const{signature:a,inputSize:s,outputSize:o}=i;return{signature:a,inputSize:s,outputSize:o}}finally{i()}})(e,t)}}function Gt(e,t){const{baseURL:i,chunkSize:r}=t;if(!e.interface){let a;try{a=((e,t,i)=>{const r={type:"module"};let a,s;typeof e==De&&(e=e());try{a=new u(e,t)}catch(t){a=e}if(jt)try{s=new A(a)}catch(e){jt=!1,s=new A(a,r)}else s=new A(a,r);return s.addEventListener("message",(e=>(async({data:e},t)=>{const{type:i,value:r,messageId:a,result:s,error:o}=e,{reader:l,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:w}=t;try{if(o){const{message:e,stack:t,code:i,name:r}=o,a=new f(e);n.assign(a,{stack:t,code:i,name:r}),_(a)}else{if("pull"==i){const{value:e,done:n}=await l.read();Yt({type:It,value:e,done:n,messageId:a},t)}i==It&&(await c.ready,await c.write(new h(r)),Yt({type:"ack",messageId:a},t)),i==Nt&&_(null,s)}}catch(o){Yt({type:Nt,messageId:a},t),_(o)}function _(e,t){e?u(e):d(t),c&&c.releaseLock(),w()}})(e,i))),s})(e.scripts[0],i,e)}catch(n){return Bt=!1,Zt(e,t)}n.assign(e,{worker:a,interface:{run:()=>(async(e,t)=>{let i,r;const a=new g(((e,t)=>{i=e,r=t}));n.assign(e,{reader:null,writer:null,resolveResult:i,rejectResult:r,result:a});const{readable:s,options:o,scripts:l}=e,{writable:c,closed:d}=(e=>{let t;const n=new g((e=>t=e));return{writable:new R({async write(t){const n=e.getWriter();await n.ready,await n.write(t),n.releaseLock()},close(){t()},abort:t=>e.getWriter().abort(t)}),closed:n}})(e.writable),u=Yt({type:"start",scripts:l.slice(1),options:o,config:t,readable:s,writable:c},e);u||n.assign(e,{reader:s.getReader(),writer:c.getWriter()});const f=await a;return u||await c.getWriter().close(),await d,f})(e,{chunkSize:r})}})}return e.interface}let jt=!0,Xt=!0;function Yt(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:r}){try{let{value:n,readable:i,writable:a}=e;const s=[];if(n&&(n.byteLength<n.buffer.byteLength?e.value=n.buffer.slice(0,n.byteLength):e.value=n.buffer,s.push(e.value)),r&&Xt?(i&&s.push(i),a&&s.push(a)):e.readable=e.writable=null,s.length)try{return t.postMessage(e,s),!0}catch(n){Xt=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(e){throw n&&n.releaseLock(),i(),e}}let Jt=[];const Qt=[];let $t=0;function en(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}const tn="HTTP error ",nn="HTTP Range not supported",rn="Writer iterator completed too soon",an="Content-Length",sn="Range",on="HEAD",ln="GET",cn="bytes",dn=65536,un="writable";class fn{constructor(){this.size=0}init(){this.initialized=!0}}class hn extends fn{get readable(){const e=this,{chunkSize:t=dn}=e,n=new z({start(){this.chunkOffset=0},async pull(i){const{offset:r=0,size:a,diskNumberStart:o}=n,{chunkOffset:l}=this;i.enqueue(await On(e,r+l,s.min(t,a-l),o)),l+t>a?i.close():this.chunkOffset+=t}});return n}}class wn extends fn{constructor(){super();const e=this,t=new R({write:t=>e.writeUint8Array(t)});n.defineProperty(e,un,{get:()=>t})}writeUint8Array(){}}class _n extends hn{constructor(e){super(),n.assign(this,{blob:e,size:e.size})}async readUint8Array(e,t){const n=this,i=e+t,r=e||i<n.size?n.blob.slice(e,i):n.blob;let a=await r.arrayBuffer();return a.byteLength>t&&(a=a.slice(e,i)),new h(a)}}class pn extends fn{constructor(e){super();const t=new S,i=[];e&&i.push(["Content-Type",e]),n.defineProperty(this,un,{get:()=>t.writable}),this.blob=new d(t.readable,{headers:i}).blob()}getData(){return this.blob}}class bn extends hn{constructor(e,t){super(),mn(this,e,t)}async init(){await yn(this,Tn,Sn),super.init()}readUint8Array(e,t){return xn(this,e,t,Tn,Sn)}}class gn extends hn{constructor(e,t){super(),mn(this,e,t)}async init(){await yn(this,En,zn),super.init()}readUint8Array(e,t){return xn(this,e,t,En,zn)}}function mn(e,t,i){const{preventHeadRequest:r,useRangeHeader:a,forceRangeRequests:s,combineSizeEocd:o}=i;delete(i=n.assign({},i)).preventHeadRequest,delete i.useRangeHeader,delete i.forceRangeRequests,delete i.combineSizeEocd,delete i.useXHR,n.assign(e,{url:t,options:i,preventHeadRequest:r,useRangeHeader:a,forceRangeRequests:s,combineSizeEocd:o})}async function yn(e,t,n){const{url:i,preventHeadRequest:a,useRangeHeader:s,forceRangeRequests:o,combineSizeEocd:l}=e;if((e=>{const{baseURL:t}=Fe(),{protocol:n}=new u(e,t);return"http:"==n||"https:"==n})(i)&&(s||o)&&(void 0===a||a)){const i=await t(ln,e,kn(e,l?-22:void 0));if(!o&&i.headers.get("Accept-Ranges")!=cn)throw new f(nn);{let a;l&&(e.eocdCache=new h(await i.arrayBuffer()));const s=i.headers.get("Content-Range");if(s){const e=s.trim().split(/\s*\/\s*/);if(e.length){const t=e[1];t&&"*"!=t&&(a=r(t))}}a===ze?await Dn(e,t,n):e.size=a}}else await Dn(e,t,n)}async function xn(e,t,n,i,r){const{useRangeHeader:a,forceRangeRequests:s,eocdCache:o,size:l,options:c}=e;if(a||s){if(o&&t==l-Se&&n==Se)return o;const r=await i(ln,e,kn(e,t,n));if(206!=r.status)throw new f(nn);return new h(await r.arrayBuffer())}{const{data:i}=e;return i||await r(e,c),new h(e.data.subarray(t,t+n))}}function kn(e,t=0,i=1){return n.assign({},vn(e),{[sn]:cn+"="+(0>t?t:t+"-"+(t+i-1))})}function vn({options:e}){const{headers:t}=e;if(t)return Symbol.iterator in t?n.fromEntries(t):t}async function Sn(e){await Rn(e,Tn)}async function zn(e){await Rn(e,En)}async function Rn(e,t){const n=await t(ln,e,vn(e));e.data=new h(await n.arrayBuffer()),e.size||(e.size=e.data.length)}async function Dn(e,t,n){if(e.preventHeadRequest)await n(e,e.options);else{const i=(await t(on,e,vn(e))).headers.get(an);i?e.size=r(i):await n(e,e.options)}}async function Tn(e,{options:t,url:i},r){const a=await fetch(i,n.assign({},t,{method:e,headers:r}));if(400>a.status)return a;throw 416==a.status?new f(nn):new f(tn+(a.statusText||a.status))}function En(e,{url:t},i){return new g(((r,a)=>{const s=new XMLHttpRequest;if(s.addEventListener("load",(()=>{if(400>s.status){const e=[];s.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach((t=>{const n=t.trim().split(/\s*:\s*/);n[0]=n[0].trim().replace(/^[a-z]|-[a-z]/g,(e=>e.toUpperCase())),e.push(n)})),r({status:s.status,arrayBuffer:()=>s.response,headers:new l(e)})}else a(416==s.status?new f(nn):new f(tn+(s.statusText||s.status)))}),!1),s.addEventListener("error",(e=>a(e.detail?e.detail.error:new f("Network error"))),!1),s.open(e,t),i)for(const e of n.entries(i))s.setRequestHeader(e[0],e[1]);s.responseType="arraybuffer",s.send()}))}class An extends hn{constructor(e,t={}){super(),n.assign(this,{url:e,reader:t.useXHR?new gn(e,t):new bn(e,t)})}set size(e){}get size(){return this.reader.size}async init(){await this.reader.init(),super.init()}readUint8Array(e,t){return this.reader.readUint8Array(e,t)}}class Cn extends hn{constructor(e){super(),this.readers=e}async init(){const e=this,{readers:t}=e;e.lastDiskNumber=0,e.lastDiskOffset=0,await g.all(t.map((async(n,i)=>{await n.init(),i!=t.length-1&&(e.lastDiskOffset+=n.size),e.size+=n.size}))),super.init()}async readUint8Array(e,t,n=0){const i=this,{readers:r}=this;let a,o=n;-1==o&&(o=r.length-1);let l=e;for(;l>=r[o].size;)l-=r[o].size,o++;const c=r[o],d=c.size;if(l+t>d){const r=d-l;a=new h(t),a.set(await On(c,l,r)),a.set(await i.readUint8Array(e+r,t-r,n),r)}else a=await On(c,l,t);return i.lastDiskNumber=s.max(o,i.lastDiskNumber),a}}class Fn extends fn{constructor(e,t=4294967295){super();const i=this;let r,a,s;n.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:t,availableSize:t});const o=new R({async write(t){const{availableSize:n}=i;if(s)t.length<n?await l(t):(await l(t.slice(0,n)),await c(),i.diskOffset+=r.size,i.diskNumber++,s=null,await this.write(t.slice(n)));else{const{value:n,done:o}=await e.next();if(o&&!n)throw new f(rn);r=n,r.size=0,r.maxSize&&(i.maxSize=r.maxSize),i.availableSize=i.maxSize,await Un(r),a=n.writable,s=a.getWriter(),await this.write(t)}},async close(){await s.ready,await c()}});async function l(e){const t=e.length;t&&(await s.ready,await s.write(e),r.size+=t,i.size+=t,i.availableSize-=t)}async function c(){a.size=r.size,await s.close()}n.defineProperty(i,un,{get:()=>o})}}async function Un(e,t){if(!e.init||e.initialized)return g.resolve();await e.init(t)}function Wn(e){return t.isArray(e)&&(e=new Cn(e)),e instanceof z&&(e={readable:e}),e}function Ln(e){e.writable===ze&&typeof e.next==De&&(e=new Fn(e)),e instanceof R&&(e={writable:e});const{writable:t}=e;return t.size===ze&&(t.size=0),e instanceof Fn||n.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function On(e,t,n,i){return e.readUint8Array(t,n,i)}const In=Cn,Nn=Fn,Pn="\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split(""),Hn=256==Pn.length;function qn(e,t){return t&&"cp437"==t.trim().toLowerCase()?(e=>{if(Hn){let t="";for(let n=0;n<e.length;n++)t+=Pn[e[n]];return t}return(new y).decode(e)})(e):new y(t).decode(e)}const Bn="filename",Mn="rawFilename",Vn="comment",Kn="rawComment",Zn="uncompressedSize",Gn="compressedSize",jn="offset",Xn="diskNumberStart",Yn="lastModDate",Jn="rawLastModDate",Qn="lastAccessDate",$n="creationDate",ei=[Bn,Mn,Gn,Zn,Yn,Jn,Vn,Kn,Qn,$n,jn,Xn,Xn,"internalFileAttribute","externalFileAttribute","msDosCompatible","zip64","encrypted","version","versionMadeBy","zipCrypto","directory","bitFlag","signature","filenameUTF8","commentUTF8","compressionMethod","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"];class ti{constructor(e){ei.forEach((t=>this[t]=e[t]))}}const ni="File format is not recognized",ii="End of central directory not found",ri="End of Zip64 central directory locator not found",ai="Central directory header not found",si="Local file header not found",oi="Zip64 extra field not found",li="File contains encrypted entry",ci="Encryption method not supported",di="Compression method not supported",ui="Split zip file",fi="utf-8",hi="cp437",wi=[[Zn,ye],[Gn,ye],[jn,ye],[Xn,xe]],_i={[xe]:{getValue:Ri,bytes:4},[ye]:{getValue:Di,bytes:8}};class pi{constructor(e,t={}){n.assign(this,{reader:Wn(e),options:t,config:Fe()})}async*getEntriesGenerator(e={}){const t=this;let{reader:i}=t;const{config:r}=t;if(await Un(i),i.size!==ze&&i.readUint8Array||(i=new _n(await new d(i.readable).blob()),await Un(i)),i.size<Se)throw new f(ni);i.chunkSize=(e=>s.max(e.chunkSize,64))(r);const a=await(async(e,t,n)=>{const i=new h(4);return Ti(i).setUint32(0,101010256,!0),await r(22)||await r(s.min(1048582,n));async function r(t){const r=n-t,a=await On(e,r,t);for(let e=a.length-22;e>=0;e--)if(a[e]==i[0]&&a[e+1]==i[1]&&a[e+2]==i[2]&&a[e+3]==i[3])return{offset:r+e,buffer:a.slice(e,e+22).buffer}}})(i,0,i.size);if(!a)throw 134695760==Ri(Ti(await On(i,0,4)))?new f(ui):new f(ii);const o=Ti(a);let l=Ri(o,12),c=Ri(o,16);const u=a.offset,w=zi(o,20),_=u+Se+w;let p=zi(o,4);const b=i.lastDiskNumber||0;let g=zi(o,6),m=zi(o,8),y=0,x=0;if(c==ye||l==ye||m==xe||g==xe){const e=Ti(await On(i,a.offset-20,20));if(117853008==Ri(e,0)){c=Di(e,8);let t=await On(i,c,56,-1),n=Ti(t);const r=a.offset-20-56;if(Ri(n,0)!=ve&&c!=r){const e=c;c=r,y=c-e,t=await On(i,c,56,-1),n=Ti(t)}if(Ri(n,0)!=ve)throw new f(ri);p==xe&&(p=Ri(n,16)),g==xe&&(g=Ri(n,20)),m==xe&&(m=Di(n,32)),l==ye&&(l=Di(n,40)),c-=l}}if(c<i.size||(y=i.size-c-l-Se,c=i.size-l-Se),b!=p)throw new f(ui);if(0>c)throw new f(ni);let k=0,v=await On(i,c,l,g),S=Ti(v);if(l){const e=a.offset-l;if(Ri(S,k)!=ke&&c!=e){const t=c;c=e,y+=c-t,v=await On(i,c,l,g),S=Ti(v)}}const z=a.offset-c-(i.lastDiskOffset||0);if(l==z||0>z||(l=z,v=await On(i,c,l,g),S=Ti(v)),0>c||c>=i.size)throw new f(ni);const R=xi(t,e,"filenameEncoding"),D=xi(t,e,"commentEncoding");for(let a=0;m>a;a++){const o=new bi(i,r,t.options);if(Ri(S,k)!=ke)throw new f(ai);gi(o,S,k+6);const l=!!o.bitFlag.languageEncodingFlag,c=k+46,d=c+o.filenameLength,u=d+o.extraFieldLength,h=zi(S,k+4),w=!0,_=v.subarray(c,d),p=zi(S,k+32),b=u+p,g=v.subarray(u,b),z=l,T=l,E=w&&!(16&~Si(S,k+38)),A=Ri(S,k+42)+y;n.assign(o,{versionMadeBy:h,msDosCompatible:w,compressedSize:0,uncompressedSize:0,commentLength:p,directory:E,offset:A,diskNumberStart:zi(S,k+34),internalFileAttribute:zi(S,k+36),externalFileAttribute:Ri(S,k+38),rawFilename:_,filenameUTF8:z,commentUTF8:T,rawExtraField:v.subarray(d,u)});const C=xi(t,e,"decodeText")||qn,F=z?fi:R||hi,U=T?fi:D||hi;let W=C(_,F);W===ze&&(W=qn(_,F));let L=C(g,U);L===ze&&(L=qn(g,U)),n.assign(o,{rawComment:g,filename:W,comment:L,directory:E||W.endsWith("/")}),x=s.max(A,x),await mi(o,o,S,k+6),o.zipCrypto=o.encrypted&&!o.extraFieldAES;const O=new ti(o);O.getData=(e,t)=>o.getData(e,O,t),k=b;const{onprogress:I}=e;if(I)try{await I(a+1,m,new ti(o))}catch(e){}yield O}const T=xi(t,e,"extractPrependedData"),E=xi(t,e,"extractAppendedData");return T&&(t.prependedData=x>0?await On(i,0,x):new h),t.comment=w?await On(i,u+Se,w):new h,E&&(t.appendedData=_<i.size?await On(i,_,i.size-_):new h),!0}async getEntries(e={}){const t=[];for await(const n of this.getEntriesGenerator(e))t.push(n);return t}async close(){}}class bi{constructor(e,t,i){n.assign(this,{reader:e,config:t,options:i})}async getData(e,t,i={}){const a=this,{reader:s,offset:o,diskNumberStart:l,extraFieldAES:c,compressionMethod:d,config:u,bitFlag:w,signature:_,rawLastModDate:p,uncompressedSize:b,compressedSize:m}=a,y=t.localDirectory={},x=Ti(await On(s,o,30,l));let k=xi(a,i,"password"),v=xi(a,i,"rawPassword");if(k=k&&k.length&&k,v=v&&v.length&&v,c&&99!=c.originalCompressionMethod)throw new f(di);if(0!=d&&8!=d)throw new f(di);if(67324752!=Ri(x,0))throw new f(si);gi(y,x,4),y.rawExtraField=y.extraFieldLength?await On(s,o+30+y.filenameLength,y.extraFieldLength,l):new h,await mi(a,y,x,4,!0),n.assign(t,{lastAccessDate:y.lastAccessDate,creationDate:y.creationDate});const S=xi(a,i,"passThrough"),z=a.encrypted&&y.encrypted&&!S,D=z&&!c;if(S||(t.zipCrypto=D),z){if(!D&&c.strength===ze)throw new f(ci);if(!k&&!v)throw new f(li)}const T=o+30+y.filenameLength+y.extraFieldLength,E=m,A=s.readable;n.assign(A,{diskNumberStart:l,offset:T,size:E});const C=xi(a,i,"signal"),F=xi(a,i,"checkPasswordOnly");F&&(e=new R),e=Ln(e),await Un(e,b);const{writable:U}=e,{onstart:W,onprogress:L,onend:O}=i,I={options:{codecType:Pt,password:k,rawPassword:v,zipCrypto:D,encryptionStrength:c&&c.strength,signed:xi(a,i,"checkSignature")&&!S,passwordVerification:D&&(w.dataDescriptor?p>>>8&255:_>>>24&255),signature:_,compressed:0!=d&&!S,encrypted:a.encrypted&&!S,useWebWorkers:xi(a,i,"useWebWorkers"),useCompressionStream:xi(a,i,"useCompressionStream"),transferStreams:xi(a,i,"transferStreams"),checkPasswordOnly:F},config:u,streamOptions:{signal:C,size:E,onstart:W,onprogress:L,onend:O}};let N=0;try{({outputSize:N}=await(async(e,t)=>{const{options:n,config:i}=t,{transferStreams:a,useWebWorkers:s,useCompressionStream:o,codecType:l,compressed:c,signed:d,encrypted:u}=n,{workerScripts:f,maxWorkers:h}=i;t.transferStreams=a||a===ze;const w=!(c||d||u||t.transferStreams);return t.useWebWorkers=!w&&(s||s===ze&&i.useWebWorkers),t.scripts=t.useWebWorkers&&f?f[l]:[],n.useCompressionStream=o||o===ze&&i.useCompressionStream,(await(async()=>{const n=Jt.find((e=>!e.busy));if(n)return en(n),new Mt(n,e,t,_);if(Jt.length<h){const n={indexWorker:$t};return $t++,Jt.push(n),new Mt(n,e,t,_)}return new g((n=>Qt.push({resolve:n,stream:e,workerOptions:t})))})()).run();function _(e){if(Qt.length){const[{resolve:t,stream:n,workerOptions:i}]=Qt.splice(0,1);t(new Mt(e,n,i,_))}else e.worker?(en(e),((e,t)=>{const{config:n}=t,{terminateWorkerTimeout:i}=n;r.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout((async()=>{Jt=Jt.filter((t=>t!=e));try{await e.terminate()}catch(e){}}),i))})(e,t)):Jt=Jt.filter((t=>t!=e))}})({readable:A,writable:U},I))}catch(e){if(!F||e.message!=Ze)throw e}finally{const e=xi(a,i,"preventClose");U.size+=N,e||U.locked||await U.getWriter().close()}return F?ze:e.getData?e.getData():U}}function gi(e,t,i){const r=e.rawBitFlag=zi(t,i+2),a=!(1&~r),s=Ri(t,i+6);n.assign(e,{encrypted:a,version:zi(t,i),bitFlag:{level:(6&r)>>1,dataDescriptor:!(8&~r),languageEncodingFlag:!(2048&~r)},rawLastModDate:s,lastModDate:ki(s),filenameLength:zi(t,i+22),extraFieldLength:zi(t,i+24)})}async function mi(e,t,i,r,a){const{rawExtraField:s}=t,c=t.extraField=new l,d=Ti(new h(s));let u=0;try{for(;u<s.length;){const e=zi(d,u),t=zi(d,u+2);c.set(e,{type:e,data:s.slice(u+4,u+4+t)}),u+=4+t}}catch(e){}const w=zi(i,r+4);n.assign(t,{signature:Ri(i,r+10),uncompressedSize:Ri(i,r+18),compressedSize:Ri(i,r+14)});const _=c.get(1);_&&(((e,t)=>{t.zip64=!0;const n=Ti(e.data),i=wi.filter((([e,n])=>t[e]==n));for(let r=0,a=0;r<i.length;r++){const[s,o]=i[r];if(t[s]==o){const i=_i[o];t[s]=e[s]=i.getValue(n,a),a+=i.bytes}else if(e[s])throw new f(oi)}})(_,t),t.extraFieldZip64=_);const p=c.get(28789);p&&(await yi(p,Bn,Mn,t,e),t.extraFieldUnicodePath=p);const b=c.get(25461);b&&(await yi(b,Vn,Kn,t,e),t.extraFieldUnicodeComment=b);const g=c.get(39169);g?(((e,t,i)=>{const r=Ti(e.data),a=Si(r,4);n.assign(e,{vendorVersion:Si(r,0),vendorId:Si(r,2),strength:a,originalCompressionMethod:i,compressionMethod:zi(r,5)}),t.compressionMethod=e.compressionMethod})(g,t,w),t.extraFieldAES=g):t.compressionMethod=w;const m=c.get(10);m&&(((e,t)=>{const i=Ti(e.data);let r,a=4;try{for(;a<e.data.length&&!r;){const t=zi(i,a),n=zi(i,a+2);1==t&&(r=e.data.slice(a+4,a+4+n)),a+=4+n}}catch(e){}try{if(r&&24==r.length){const i=Ti(r),a=i.getBigUint64(0,!0),s=i.getBigUint64(8,!0),o=i.getBigUint64(16,!0);n.assign(e,{rawLastModDate:a,rawLastAccessDate:s,rawCreationDate:o});const l={lastModDate:vi(a),lastAccessDate:vi(s),creationDate:vi(o)};n.assign(e,l),n.assign(t,l)}}catch(e){}})(m,t),t.extraFieldNTFS=m);const y=c.get(21589);y&&(((e,t,n)=>{const i=Ti(e.data),r=Si(i,0),a=[],s=[];n?(1&~r||(a.push(Yn),s.push(Jn)),2&~r||(a.push(Qn),s.push("rawLastAccessDate")),4&~r||(a.push($n),s.push("rawCreationDate"))):5>e.data.length||(a.push(Yn),s.push(Jn));let l=1;a.forEach(((n,r)=>{if(e.data.length>=l+4){const a=Ri(i,l);t[n]=e[n]=new o(1e3*a);const c=s[r];e[c]=a}l+=4}))})(y,t,a),t.extraFieldExtendedTimestamp=y);const x=c.get(6534);x&&(t.extraFieldUSDZ=x)}async function yi(e,t,i,r,a){const s=Ti(e.data),o=new Oe;o.append(a[i]);const l=Ti(new h(4));l.setUint32(0,o.get(),!0);const c=Ri(s,1);n.assign(e,{version:Si(s,0),[t]:qn(e.data.subarray(5)),valid:!a.bitFlag.languageEncodingFlag&&c==Ri(l,0)}),e.valid&&(r[t]=e[t],r[t+"UTF8"]=!0)}function xi(e,t,n){return t[n]===ze?e.options[n]:t[n]}function ki(e){const t=(4294901760&e)>>16,n=65535&e;try{return new o(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&n)>>11,(2016&n)>>5,2*(31&n),0)}catch(e){}}function vi(e){return new o(r(e/a(1e4)-a(116444736e5)))}function Si(e,t){return e.getUint8(t)}function zi(e,t){return e.getUint16(t,!0)}function Ri(e,t){return e.getUint32(t,!0)}function Di(e,t){return r(e.getBigUint64(t,!0))}function Ti(e){return new p(e.buffer)}Ue({Inflate:function(e){const t=new me,n=e&&e.chunkSize?s.floor(2*e.chunkSize):131072,i=new h(n);let r=!1;t.inflateInit(),t.next_out=i,this.append=(e,a)=>{const s=[];let o,l,c=0,d=0,u=0;if(0!==e.length){t.next_in_index=0,t.next_in=e,t.avail_in=e.length;do{if(t.next_out_index=0,t.avail_out=n,0!==t.avail_in||r||(t.next_in_index=0,r=!0),o=t.inflate(0),r&&o===O){if(0!==t.avail_in)throw new f("inflating: bad input")}else if(o!==C&&o!==F)throw new f("inflating: "+t.msg);if((r||o===F)&&t.avail_in===e.length)throw new f("inflating: bad input");t.next_out_index&&(t.next_out_index===n?s.push(new h(i)):s.push(i.subarray(0,t.next_out_index))),u+=t.next_out_index,a&&t.next_in_index>0&&t.next_in_index!=c&&(a(t.next_in_index),c=t.next_in_index)}while(t.avail_in>0||0===t.avail_out);return s.length>1?(l=new h(u),s.forEach((e=>{l.set(e,d),d+=e.length}))):l=s[0]?new h(s[0]):new h,l}},this.flush=()=>{t.inflateEnd()}}}),e.BlobReader=_n,e.BlobWriter=pn,e.Data64URIReader=class extends hn{constructor(e){super();let t=e.length;for(;"="==e.charAt(t-1);)t--;const i=e.indexOf(",")+1;n.assign(this,{dataURI:e,dataStart:i,size:s.floor(.75*(t-i))})}readUint8Array(e,t){const{dataStart:n,dataURI:i}=this,r=new h(t),a=4*s.floor(e/3),o=atob(i.substring(a+n,4*s.ceil((e+t)/3)+n)),l=e-3*s.floor(a/4);for(let e=l;l+t>e;e++)r[e-l]=o.charCodeAt(e);return r}},e.Data64URIWriter=class extends wn{constructor(e){super(),n.assign(this,{data:"data:"+(e||"")+";base64,",pending:[]})}writeUint8Array(e){const t=this;let n=0,r=t.pending;const a=t.pending.length;for(t.pending="",n=0;n<3*s.floor((a+e.length)/3)-a;n++)r+=i.fromCharCode(e[n]);for(;n<e.length;n++)t.pending+=i.fromCharCode(e[n]);r.length>2?t.data+=v(r):t.pending=r}getData(){return this.data+v(this.pending)}},e.ERR_BAD_FORMAT=ni,e.ERR_CENTRAL_DIRECTORY_NOT_FOUND=ai,e.ERR_ENCRYPTED=li,e.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND=ri,e.ERR_EOCDR_NOT_FOUND=ii,e.ERR_EXTRAFIELD_ZIP64_NOT_FOUND=oi,e.ERR_HTTP_RANGE=nn,e.ERR_INVALID_PASSWORD=Ve,e.ERR_INVALID_SIGNATURE=Ke,e.ERR_ITERATOR_COMPLETED_TOO_SOON=rn,e.ERR_LOCAL_FILE_HEADER_NOT_FOUND=si,e.ERR_SPLIT_ZIP_FILE=ui,e.ERR_UNSUPPORTED_COMPRESSION=di,e.ERR_UNSUPPORTED_ENCRYPTION=ci,e.HttpRangeReader=class extends An{constructor(e,t={}){t.useRangeHeader=!0,super(e,t)}},e.HttpReader=An,e.Reader=hn,e.SplitDataReader=Cn,e.SplitDataWriter=Fn,e.SplitZipReader=In,e.SplitZipWriter=Nn,e.TextReader=class extends _n{constructor(e){super(new b([e],{type:"text/plain"}))}},e.TextWriter=class extends pn{constructor(e){super(e),n.assign(this,{encoding:e,utf8:!e||"utf-8"==e.toLowerCase()})}async getData(){const{encoding:e,utf8:t}=this,i=await super.getData();if(i.text&&t)return i.text();{const t=new FileReader;return new g(((r,a)=>{n.assign(t,{onload:({target:e})=>r(e.result),onerror:()=>a(t.error)}),t.readAsText(i,e)}))}}},e.Uint8ArrayReader=class extends hn{constructor(e){super(),n.assign(this,{array:e,size:e.length})}readUint8Array(e,t){return this.array.slice(e,e+t)}},e.Uint8ArrayWriter=class extends wn{init(e=0){n.assign(this,{offset:0,array:new h(e)}),super.init()}writeUint8Array(e){const t=this;if(t.offset+e.length>t.array.length){const n=t.array;t.array=new h(n.length+e.length),t.array.set(n)}t.array.set(e,t.offset),t.offset+=e.length}getData(){return this.array}},e.Writer=wn,e.ZipReader=pi,e.ZipReaderStream=class{constructor(e={}){const{readable:t,writable:n}=new S,i=new pi(t,e).getEntriesGenerator();this.readable=new z({async pull(e){const{done:t,value:n}=await i.next();if(t)return e.close();const r={...n,readable:(()=>{const{readable:e,writable:t}=new S;if(n.getData)return n.getData(t),e})()};delete r.getData,e.enqueue(r)}}),this.writable=n}},e.configure=Ue,e.getMimeType=()=>"application/octet-stream",e.initReader=Wn,e.initStream=Un,e.initWriter=Ln,e.readUint8Array=On,e.terminateWorkers=async()=>{await g.allSettled(Jt.map((e=>(en(e),e.terminate()))))}}));
((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).zip={})})(this,(function(e){"use strict";const{Array:t,Object:n,String:i,Number:r,BigInt:a,Math:s,Date:o,Map:l,Set:c,Response:d,URL:u,Error:f,Uint8Array:h,Uint16Array:w,Uint32Array:_,DataView:p,Blob:b,Promise:g,TextEncoder:m,TextDecoder:y,document:x,crypto:k,btoa:v,TransformStream:S,ReadableStream:z,WritableStream:R,CompressionStream:D,DecompressionStream:T,navigator:E,Worker:A}="undefined"!=typeof globalThis?globalThis:this||self,C=0,F=1,U=-2,W=-3,L=-4,O=-5,I=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],N=1440,P=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],H=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],q=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],B=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],M=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],V=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],K=15;function Z(){let e,t,n,i,r,a;function s(e,t,s,o,l,c,d,u,f,h,w){let _,p,b,g,m,y,x,k,v,S,z,R,D,T,E;S=0,m=s;do{n[e[t+S]]++,S++,m--}while(0!==m);if(n[0]==s)return d[0]=-1,u[0]=0,C;for(k=u[0],y=1;K>=y&&0===n[y];y++);for(x=y,y>k&&(k=y),m=K;0!==m&&0===n[m];m--);for(b=m,k>m&&(k=m),u[0]=k,T=1<<y;m>y;y++,T<<=1)if(0>(T-=n[y]))return W;if(0>(T-=n[m]))return W;for(n[m]+=T,a[1]=y=0,S=1,D=2;0!=--m;)a[D]=y+=n[S],D++,S++;m=0,S=0;do{0!==(y=e[t+S])&&(w[a[y]++]=m),S++}while(++m<s);for(s=a[b],a[0]=m=0,S=0,g=-1,R=-k,r[0]=0,z=0,E=0;b>=x;x++)for(_=n[x];0!=_--;){for(;x>R+k;){if(g++,R+=k,E=b-R,E=E>k?k:E,(p=1<<(y=x-R))>_+1&&(p-=_+1,D=x,E>y))for(;++y<E&&(p<<=1)>n[++D];)p-=n[D];if(E=1<<y,h[0]+E>N)return W;r[g]=z=h[0],h[0]+=E,0!==g?(a[g]=m,i[0]=y,i[1]=k,y=m>>>R-k,i[2]=z-r[g-1]-y,f.set(i,3*(r[g-1]+y))):d[0]=z}for(i[1]=x-R,s>S?w[S]<o?(i[0]=256>w[S]?0:96,i[2]=w[S++]):(i[0]=c[w[S]-o]+16+64,i[2]=l[w[S++]-o]):i[0]=192,p=1<<x-R,y=m>>>R;E>y;y+=p)f.set(i,3*(z+y));for(y=1<<x-1;m&y;y>>>=1)m^=y;for(m^=y,v=(1<<R)-1;(m&v)!=a[g];)g--,R-=k,v=(1<<R)-1}return 0!==T&&1!=b?O:C}function o(s){let o;for(e||(e=[],t=[],n=new Int32Array(K+1),i=[],r=new Int32Array(K),a=new Int32Array(K+1)),t.length<s&&(t=[]),o=0;s>o;o++)t[o]=0;for(o=0;K+1>o;o++)n[o]=0;for(o=0;3>o;o++)i[o]=0;r.set(n.subarray(0,K),0),a.set(n.subarray(0,K+1),0)}this.inflate_trees_bits=(n,i,r,a,l)=>{let c;return o(19),e[0]=0,c=s(n,0,19,19,null,null,r,i,a,e,t),c==W?l.msg="oversubscribed dynamic bit lengths tree":c!=O&&0!==i[0]||(l.msg="incomplete dynamic bit lengths tree",c=W),c},this.inflate_trees_dynamic=(n,i,r,a,l,c,d,u,f)=>{let h;return o(288),e[0]=0,h=s(r,0,n,257,q,B,c,a,u,e,t),h!=C||0===a[0]?(h==W?f.msg="oversubscribed literal/length tree":h!=L&&(f.msg="incomplete literal/length tree",h=W),h):(o(288),h=s(r,n,i,0,M,V,d,l,u,e,t),h!=C||0===l[0]&&n>257?(h==W?f.msg="oversubscribed distance tree":h==O?(f.msg="incomplete distance tree",h=W):h!=L&&(f.msg="empty distance tree with lengths",h=W),h):C)}}Z.inflate_trees_fixed=(e,t,n,i)=>(e[0]=9,t[0]=5,n[0]=P,i[0]=H,C);const G=0,j=1,X=2,Y=3,J=4,Q=5,$=6,ee=7,te=8,ne=9;function ie(){const e=this;let t,n,i,r,a=0,s=0,o=0,l=0,c=0,d=0,u=0,f=0,h=0,w=0;function _(e,t,n,i,r,a,s,o){let l,c,d,u,f,h,w,_,p,b,g,m,y,x,k,v;w=o.next_in_index,_=o.avail_in,f=s.bitb,h=s.bitk,p=s.write,b=p<s.read?s.read-p-1:s.end-p,g=I[e],m=I[t];do{for(;20>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;if(l=f&g,c=n,d=i,v=3*(d+l),0!==(u=c[v]))for(;;){if(f>>=c[v+1],h-=c[v+1],16&u){for(u&=15,y=c[v+2]+(f&I[u]),f>>=u,h-=u;15>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;for(l=f&m,c=r,d=a,v=3*(d+l),u=c[v];;){if(f>>=c[v+1],h-=c[v+1],16&u){for(u&=15;u>h;)_--,f|=(255&o.read_byte(w++))<<h,h+=8;if(x=c[v+2]+(f&I[u]),f>>=u,h-=u,b-=y,x>p){k=p-x;do{k+=s.end}while(0>k);if(u=s.end-k,y>u){if(y-=u,p-k>0&&u>p-k)do{s.win[p++]=s.win[k++]}while(0!=--u);else s.win.set(s.win.subarray(k,k+u),p),p+=u,k+=u,u=0;k=0}}else k=p-x,p-k>0&&2>p-k?(s.win[p++]=s.win[k++],s.win[p++]=s.win[k++],y-=2):(s.win.set(s.win.subarray(k,k+2),p),p+=2,k+=2,y-=2);if(p-k>0&&y>p-k)do{s.win[p++]=s.win[k++]}while(0!=--y);else s.win.set(s.win.subarray(k,k+y),p),p+=y,k+=y,y=0;break}if(64&u)return o.msg="invalid distance code",y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,W;l+=c[v+2],l+=f&I[u],v=3*(d+l),u=c[v]}break}if(64&u)return 32&u?(y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,F):(o.msg="invalid literal/length code",y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,W);if(l+=c[v+2],l+=f&I[u],v=3*(d+l),0===(u=c[v])){f>>=c[v+1],h-=c[v+1],s.win[p++]=c[v+2],b--;break}}else f>>=c[v+1],h-=c[v+1],s.win[p++]=c[v+2],b--}while(b>=258&&_>=10);return y=o.avail_in-_,y=y>h>>3?h>>3:y,_+=y,w-=y,h-=y<<3,s.bitb=f,s.bitk=h,o.avail_in=_,o.total_in+=w-o.next_in_index,o.next_in_index=w,s.write=p,C}e.init=(e,a,s,o,l,c)=>{t=G,u=e,f=a,i=s,h=o,r=l,w=c,n=null},e.proc=(e,p,b)=>{let g,m,y,x,k,v,S,z=0,R=0,D=0;for(D=p.next_in_index,x=p.avail_in,z=e.bitb,R=e.bitk,k=e.write,v=k<e.read?e.read-k-1:e.end-k;;)switch(t){case G:if(v>=258&&x>=10&&(e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,b=_(u,f,i,h,r,w,e,p),D=p.next_in_index,x=p.avail_in,z=e.bitb,R=e.bitk,k=e.write,v=k<e.read?e.read-k-1:e.end-k,b!=C)){t=b==F?ee:ne;break}o=u,n=i,s=h,t=j;case j:for(g=o;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}if(m=3*(s+(z&I[g])),z>>>=n[m+1],R-=n[m+1],y=n[m],0===y){l=n[m+2],t=$;break}if(16&y){c=15&y,a=n[m+2],t=X;break}if(!(64&y)){o=y,s=m/3+n[m+2];break}if(32&y){t=ee;break}return t=ne,p.msg="invalid literal/length code",b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case X:for(g=c;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}a+=z&I[g],z>>=g,R-=g,o=f,n=r,s=w,t=Y;case Y:for(g=o;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}if(m=3*(s+(z&I[g])),z>>=n[m+1],R-=n[m+1],y=n[m],16&y){c=15&y,d=n[m+2],t=J;break}if(!(64&y)){o=y,s=m/3+n[m+2];break}return t=ne,p.msg="invalid distance code",b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case J:for(g=c;g>R;){if(0===x)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,x--,z|=(255&p.read_byte(D++))<<R,R+=8}d+=z&I[g],z>>=g,R-=g,t=Q;case Q:for(S=k-d;0>S;)S+=e.end;for(;0!==a;){if(0===v&&(k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v&&(e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v)))return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);e.win[k++]=e.win[S++],v--,S==e.end&&(S=0),a--}t=G;break;case $:if(0===v&&(k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v&&(e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,k==e.end&&0!==e.read&&(k=0,v=k<e.read?e.read-k-1:e.end-k),0===v)))return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);b=C,e.win[k++]=l,v--,t=G;break;case ee:if(R>7&&(R-=8,x++,D--),e.write=k,b=e.inflate_flush(p,b),k=e.write,v=k<e.read?e.read-k-1:e.end-k,e.read!=e.write)return e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);t=te;case te:return b=F,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);case ne:return b=W,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b);default:return b=U,e.bitb=z,e.bitk=R,p.avail_in=x,p.total_in+=D-p.next_in_index,p.next_in_index=D,e.write=k,e.inflate_flush(p,b)}},e.free=()=>{}}const re=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ae=0,se=1,oe=2,le=3,ce=4,de=5,ue=6,fe=7,he=8,we=9;function _e(e,t){const n=this;let i,r=ae,a=0,s=0,o=0;const l=[0],c=[0],d=new ie;let u=0,f=new Int32Array(3*N);const w=new Z;n.bitk=0,n.bitb=0,n.win=new h(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),r==ue&&d.free(e),r=ae,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=(e,t)=>{let i,r,a;return r=e.next_out_index,a=n.read,i=(a>n.write?n.end:n.write)-a,i>e.avail_out&&(i=e.avail_out),0!==i&&t==O&&(t=C),e.avail_out-=i,e.total_out+=i,e.next_out.set(n.win.subarray(a,a+i),r),r+=i,a+=i,a==n.end&&(a=0,n.write==n.end&&(n.write=0),i=n.write-a,i>e.avail_out&&(i=e.avail_out),0!==i&&t==O&&(t=C),e.avail_out-=i,e.total_out+=i,e.next_out.set(n.win.subarray(a,a+i),r),r+=i,a+=i),e.next_out_index=r,n.read=a,t},n.proc=(e,t)=>{let h,_,p,b,g,m,y,x;for(b=e.next_in_index,g=e.avail_in,_=n.bitb,p=n.bitk,m=n.write,y=m<n.read?n.read-m-1:n.end-m;;){let k,v,S,z,R,D,T,E;switch(r){case ae:for(;3>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}switch(h=7&_,u=1&h,h>>>1){case 0:_>>>=3,p-=3,h=7&p,_>>>=h,p-=h,r=se;break;case 1:k=[],v=[],S=[[]],z=[[]],Z.inflate_trees_fixed(k,v,S,z),d.init(k[0],v[0],S[0],0,z[0],0),_>>>=3,p-=3,r=ue;break;case 2:_>>>=3,p-=3,r=le;break;case 3:return _>>>=3,p-=3,r=we,e.msg="invalid block type",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t)}break;case se:for(;32>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if((~_>>>16&65535)!=(65535&_))return r=we,e.msg="invalid stored block lengths",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);a=65535&_,_=p=0,r=0!==a?oe:0!==u?fe:ae;break;case oe:if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(0===y&&(m==n.end&&0!==n.read&&(m=0,y=m<n.read?n.read-m-1:n.end-m),0===y&&(n.write=m,t=n.inflate_flush(e,t),m=n.write,y=m<n.read?n.read-m-1:n.end-m,m==n.end&&0!==n.read&&(m=0,y=m<n.read?n.read-m-1:n.end-m),0===y)))return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(t=C,h=a,h>g&&(h=g),h>y&&(h=y),n.win.set(e.read_buf(b,h),m),b+=h,g-=h,m+=h,y-=h,0!=(a-=h))break;r=0!==u?fe:ae;break;case le:for(;14>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(s=h=16383&_,(31&h)>29||(h>>5&31)>29)return r=we,e.msg="too many length or distance symbols",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);if(h=258+(31&h)+(h>>5&31),!i||i.length<h)i=[];else for(x=0;h>x;x++)i[x]=0;_>>>=14,p-=14,o=0,r=ce;case ce:for(;4+(s>>>10)>o;){for(;3>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}i[re[o++]]=7&_,_>>>=3,p-=3}for(;19>o;)i[re[o++]]=0;if(l[0]=7,h=w.inflate_trees_bits(i,l,c,f,e),h!=C)return(t=h)==W&&(i=null,r=we),n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);o=0,r=de;case de:for(;h=s,258+(31&h)+(h>>5&31)>o;){let a,d;for(h=l[0];h>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(h=f[3*(c[0]+(_&I[h]))+1],d=f[3*(c[0]+(_&I[h]))+2],16>d)_>>>=h,p-=h,i[o++]=d;else{for(x=18==d?7:d-14,a=18==d?11:3;h+x>p;){if(0===g)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);t=C,g--,_|=(255&e.read_byte(b++))<<p,p+=8}if(_>>>=h,p-=h,a+=_&I[x],_>>>=x,p-=x,x=o,h=s,x+a>258+(31&h)+(h>>5&31)||16==d&&1>x)return i=null,r=we,e.msg="invalid bit length repeat",t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);d=16==d?i[x-1]:0;do{i[x++]=d}while(0!=--a);o=x}}if(c[0]=-1,R=[],D=[],T=[],E=[],R[0]=9,D[0]=6,h=s,h=w.inflate_trees_dynamic(257+(31&h),1+(h>>5&31),i,R,D,T,E,f,e),h!=C)return h==W&&(i=null,r=we),t=h,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);d.init(R[0],D[0],f,T[0],f,E[0]),r=ue;case ue:if(n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,(t=d.proc(n,e,t))!=F)return n.inflate_flush(e,t);if(t=C,d.free(e),b=e.next_in_index,g=e.avail_in,_=n.bitb,p=n.bitk,m=n.write,y=m<n.read?n.read-m-1:n.end-m,0===u){r=ae;break}r=fe;case fe:if(n.write=m,t=n.inflate_flush(e,t),m=n.write,y=m<n.read?n.read-m-1:n.end-m,n.read!=n.write)return n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);r=he;case he:return t=F,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);case we:return t=W,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t);default:return t=U,n.bitb=_,n.bitk=p,e.avail_in=g,e.total_in+=b-e.next_in_index,e.next_in_index=b,n.write=m,n.inflate_flush(e,t)}}},n.free=e=>{n.reset(e,null),n.win=null,f=null},n.set_dictionary=(e,t,i)=>{n.win.set(e.subarray(t,t+i),0),n.read=n.write=i},n.sync_point=()=>r==se?1:0}const pe=13,be=[0,0,255,255];function ge(){const e=this;function t(e){return e&&e.istate?(e.total_in=e.total_out=0,e.msg=null,e.istate.mode=7,e.istate.blocks.reset(e,null),C):U}e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0,e.inflateEnd=t=>(e.blocks&&e.blocks.free(t),e.blocks=null,C),e.inflateInit=(n,i)=>(n.msg=null,e.blocks=null,8>i||i>15?(e.inflateEnd(n),U):(e.wbits=i,n.istate.blocks=new _e(n,1<<i),t(n),C)),e.inflate=(e,t)=>{let n,i;if(!e||!e.istate||!e.next_in)return U;const r=e.istate;for(t=4==t?O:C,n=O;;)switch(r.mode){case 0:if(0===e.avail_in)return n;if(n=t,e.avail_in--,e.total_in++,8!=(15&(r.method=e.read_byte(e.next_in_index++)))){r.mode=pe,e.msg="unknown compression method",r.marker=5;break}if(8+(r.method>>4)>r.wbits){r.mode=pe,e.msg="invalid win size",r.marker=5;break}r.mode=1;case 1:if(0===e.avail_in)return n;if(n=t,e.avail_in--,e.total_in++,i=255&e.read_byte(e.next_in_index++),((r.method<<8)+i)%31!=0){r.mode=pe,e.msg="incorrect header check",r.marker=5;break}if(!(32&i)){r.mode=7;break}r.mode=2;case 2:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need=(255&e.read_byte(e.next_in_index++))<<24&4278190080,r.mode=3;case 3:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need+=(255&e.read_byte(e.next_in_index++))<<16&16711680,r.mode=4;case 4:if(0===e.avail_in)return n;n=t,e.avail_in--,e.total_in++,r.need+=(255&e.read_byte(e.next_in_index++))<<8&65280,r.mode=5;case 5:return 0===e.avail_in?n:(n=t,e.avail_in--,e.total_in++,r.need+=255&e.read_byte(e.next_in_index++),r.mode=6,2);case 6:return r.mode=pe,e.msg="need dictionary",r.marker=0,U;case 7:if(n=r.blocks.proc(e,n),n==W){r.mode=pe,r.marker=0;break}if(n==C&&(n=t),n!=F)return n;n=t,r.blocks.reset(e,r.was),r.mode=12;case 12:return e.avail_in=0,F;case pe:return W;default:return U}},e.inflateSetDictionary=(e,t,n)=>{let i=0,r=n;if(!e||!e.istate||6!=e.istate.mode)return U;const a=e.istate;return r<1<<a.wbits||(r=(1<<a.wbits)-1,i=n-r),a.blocks.set_dictionary(t,i,r),a.mode=7,C},e.inflateSync=e=>{let n,i,r,a,s;if(!e||!e.istate)return U;const o=e.istate;if(o.mode!=pe&&(o.mode=pe,o.marker=0),0===(n=e.avail_in))return O;for(i=e.next_in_index,r=o.marker;0!==n&&4>r;)e.read_byte(i)==be[r]?r++:r=0!==e.read_byte(i)?0:4-r,i++,n--;return e.total_in+=i-e.next_in_index,e.next_in_index=i,e.avail_in=n,o.marker=r,4!=r?W:(a=e.total_in,s=e.total_out,t(e),e.total_in=a,e.total_out=s,o.mode=7,C)},e.inflateSyncPoint=e=>e&&e.istate&&e.istate.blocks?e.istate.blocks.sync_point():U}function me(){}me.prototype={inflateInit(e){const t=this;return t.istate=new ge,e||(e=15),t.istate.inflateInit(t,e)},inflate(e){const t=this;return t.istate?t.istate.inflate(t,e):U},inflateEnd(){const e=this;if(!e.istate)return U;const t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync(){const e=this;return e.istate?e.istate.inflateSync(e):U},inflateSetDictionary(e,t){const n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):U},read_byte(e){return this.next_in[e]},read_buf(e,t){return this.next_in.subarray(e,e+t)}};const ye=4294967295,xe=65535,ke=33639248,ve=101075792,Se=22,ze=void 0,Re="undefined",De="function";class Te{constructor(e){return class extends S{constructor(t,n){const i=new e(n);super({transform(e,t){t.enqueue(i.append(e))},flush(e){const t=i.flush();t&&e.enqueue(t)}})}}}}let Ee=2;try{typeof E!=Re&&E.hardwareConcurrency&&(Ee=E.hardwareConcurrency)}catch(e){}const Ae={chunkSize:524288,maxWorkers:Ee,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:ze,CompressionStreamNative:typeof D!=Re&&D,DecompressionStreamNative:typeof T!=Re&&T},Ce=n.assign({},Ae);function Fe(){return Ce}function Ue(e){const{baseURL:n,chunkSize:i,maxWorkers:r,terminateWorkerTimeout:a,useCompressionStream:s,useWebWorkers:o,Deflate:l,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:h}=e;if(We("baseURL",n),We("chunkSize",i),We("maxWorkers",r),We("terminateWorkerTimeout",a),We("useCompressionStream",s),We("useWebWorkers",o),l&&(Ce.CompressionStream=new Te(l)),c&&(Ce.DecompressionStream=new Te(c)),We("CompressionStream",d),We("DecompressionStream",u),h!==ze){const{deflate:e,inflate:n}=h;if((e||n)&&(Ce.workerScripts||(Ce.workerScripts={})),e){if(!t.isArray(e))throw new f("workerScripts.deflate must be an array");Ce.workerScripts.deflate=e}if(n){if(!t.isArray(n))throw new f("workerScripts.inflate must be an array");Ce.workerScripts.inflate=n}}}function We(e,t){t!==ze&&(Ce[e]=t)}const Le=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;Le[e]=t}class Oe{constructor(e){this.crc=e||-1}append(e){let t=0|this.crc;for(let n=0,i=0|e.length;i>n;n++)t=t>>>8^Le[255&(t^e[n])];this.crc=t}get(){return~this.crc}}class Ie extends S{constructor(){let e;const t=new Oe;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new h(4);new p(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const Ne={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],i=Ne.getPartial(n);return 32===i?e.concat(t):Ne._shiftRight(t,i,0|n,e.slice(0,e.length-1))},bitLength(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+Ne.getPartial(n)},clamp(e,t){if(32*e.length<t)return e;const n=(e=e.slice(0,s.ceil(t/32))).length;return t&=31,n>0&&t&&(e[n-1]=Ne.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,getPartial:e=>s.round(e/1099511627776)||32,_shiftRight(e,t,n,i){for(void 0===i&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(0===t)return i.concat(e);for(let r=0;r<e.length;r++)i.push(n|e[r]>>>t),n=e[r]<<32-t;const r=e.length?e[e.length-1]:0,a=Ne.getPartial(r);return i.push(Ne.partial(t+a&31,t+a>32?n:i.pop(),1)),i}},Pe={bytes:{fromBits(e){const t=Ne.bitLength(e)/8,n=new h(t);let i;for(let r=0;t>r;r++)3&r||(i=e[r/4]),n[r]=i>>>24,i<<=8;return n},toBits(e){const t=[];let n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],3&~n||(t.push(i),i=0);return 3&n&&t.push(Ne.partial(8*(3&n),i)),t}}},He=class{constructor(e){const t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){const e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){const t=this;"string"==typeof e&&(e=Pe.utf8String.toBits(e));const n=t._buffer=Ne.concat(t._buffer,e),i=t._length,r=t._length=i+Ne.bitLength(e);if(r>9007199254740991)throw new f("Cannot hash more than 2^53 - 1 bits");const a=new _(n);let s=0;for(let e=t.blockSize+i-(t.blockSize+i&t.blockSize-1);r>=e;e+=t.blockSize)t._block(a.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t}finalize(){const e=this;let t=e._buffer;const n=e._h;t=Ne.concat(t,[Ne.partial(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(s.floor(e._length/4294967296)),t.push(0|e._length);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,i){return e>19?e>39?e>59?e>79?void 0:t^n^i:t&n|t&i|n&i:t^n^i:t&n|~t&i}_S(e,t){return t<<e|t>>>32-e}_block(e){const n=this,i=n._h,r=t(80);for(let t=0;16>t;t++)r[t]=e[t];let a=i[0],o=i[1],l=i[2],c=i[3],d=i[4];for(let e=0;79>=e;e++){16>e||(r[e]=n._S(1,r[e-3]^r[e-8]^r[e-14]^r[e-16]));const t=n._S(5,a)+n._f(e,o,l,c)+d+r[e]+n._key[s.floor(e/20)]|0;d=c,c=l,l=n._S(30,o),o=a,a=t}i[0]=i[0]+a|0,i[1]=i[1]+o|0,i[2]=i[2]+l|0,i[3]=i[3]+c|0,i[4]=i[4]+d|0}},qe={getRandomValues(e){const t=new _(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(s.random()>.5?1:-1))};for(let i,r=0;r<e.length;r+=4){const e=n(4294967296*(i||s.random()));i=987654071*e(),t[r/4]=4294967296*e()|0}return e}},Be={importKey:e=>new Be.hmacSha1(Pe.bytes.toBits(e)),pbkdf2(e,t,n,i){if(n=n||1e4,0>i||0>n)throw new f("invalid params to pbkdf2");const r=1+(i>>5)<<2;let a,s,o,l,c;const d=new ArrayBuffer(r),u=new p(d);let h=0;const w=Ne;for(t=Pe.bytes.toBits(t),c=1;(r||1)>h;c++){for(a=s=e.encrypt(w.concat(t,[c])),o=1;n>o;o++)for(s=e.encrypt(s),l=0;l<s.length;l++)a[l]^=s[l];for(o=0;(r||1)>h&&o<a.length;o++)u.setInt32(h,a[o]),h+=4}return d.slice(0,i/8)},hmacSha1:class{constructor(e){const t=this,n=t._hash=He,i=[[],[]];t._baseHash=[new n,new n];const r=t._baseHash[0].blockSize/32;e.length>r&&(e=(new n).update(e).finalize());for(let t=0;r>t;t++)i[0][t]=909522486^e[t],i[1][t]=1549556828^e[t];t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){const e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){this._updated=!0,this._resultHash.update(e)}digest(){const e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new f("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},Me=typeof k!=Re&&typeof k.getRandomValues==De,Ve="Invalid password",Ke="Invalid signature",Ze="zipjs-abort-check-password";function Ge(e){return Me?k.getRandomValues(e):qe.getRandomValues(e)}const je=16,Xe={name:"PBKDF2"},Ye=n.assign({hash:{name:"HMAC"}},Xe),Je=n.assign({iterations:1e3,hash:{name:"SHA-1"}},Xe),Qe=["deriveBits"],$e=[8,12,16],et=[16,24,32],tt=10,nt=[0,0,0,0],it=typeof k!=Re,rt=it&&k.subtle,at=it&&typeof rt!=Re,st=Pe.bytes,ot=class{constructor(e){const t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();const n=t._tables[0][4],i=t._tables[1],r=e.length;let a,s,o,l=1;if(4!==r&&6!==r&&8!==r)throw new f("invalid aes key size");for(t._key=[s=e.slice(0),o=[]],a=r;4*r+28>a;a++){let e=s[a-1];(a%r==0||8===r&&a%r==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],a%r==0&&(e=e<<8^e>>>24^l<<24,l=l<<1^283*(l>>7))),s[a]=s[a-r]^e}for(let e=0;a;e++,a--){const t=s[3&e?a:a-4];o[e]=4>=a||4>e?t:i[0][n[t>>>24]]^i[1][n[t>>16&255]]^i[2][n[t>>8&255]]^i[3][n[255&t]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){const e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],r=[],a=[];let s,o,l,c;for(let e=0;256>e;e++)a[(r[e]=e<<1^283*(e>>7))^e]=e;for(let d=s=0;!n[d];d^=o||1,s=a[s]||1){let a=s^s<<1^s<<2^s<<3^s<<4;a=a>>8^255&a^99,n[d]=a,i[a]=d,c=r[l=r[o=r[d]]];let u=16843009*c^65537*l^257*o^16843008*d,f=257*r[a]^16843008*a;for(let n=0;4>n;n++)e[n][d]=f=f<<24^f>>>8,t[n][a]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}_crypt(e,t){if(4!==e.length)throw new f("invalid aes block size");const n=this._key[t],i=n.length/4-2,r=[0,0,0,0],a=this._tables[t],s=a[0],o=a[1],l=a[2],c=a[3],d=a[4];let u,h,w,_=e[0]^n[0],p=e[t?3:1]^n[1],b=e[2]^n[2],g=e[t?1:3]^n[3],m=4;for(let e=0;i>e;e++)u=s[_>>>24]^o[p>>16&255]^l[b>>8&255]^c[255&g]^n[m],h=s[p>>>24]^o[b>>16&255]^l[g>>8&255]^c[255&_]^n[m+1],w=s[b>>>24]^o[g>>16&255]^l[_>>8&255]^c[255&p]^n[m+2],g=s[g>>>24]^o[_>>16&255]^l[p>>8&255]^c[255&b]^n[m+3],m+=4,_=u,p=h,b=w;for(let e=0;4>e;e++)r[t?3&-e:e]=d[_>>>24]<<24^d[p>>16&255]<<16^d[b>>8&255]<<8^d[255&g]^n[m++],u=_,_=p,p=b,b=g,g=u;return r}},lt=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if(255&~(e>>24))e+=1<<24;else{let t=e>>16&255,n=e>>8&255,i=255&e;255===t?(t=0,255===n?(n=0,255===i?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}return e}incCounter(e){0===(e[0]=this.incWord(e[0]))&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];const r=Ne.bitLength(t);for(let r=0;i>r;r+=4){this.incCounter(n);const i=e.encrypt(n);t[r]^=i[0],t[r+1]^=i[1],t[r+2]^=i[2],t[r+3]^=i[3]}return Ne.clamp(t,r)}},ct=Be.hmacSha1;let dt=it&&at&&typeof rt.importKey==De,ut=it&&at&&typeof rt.deriveBits==De;class ft extends S{constructor({password:e,rawPassword:t,signed:i,encryptionStrength:r,checkPasswordOnly:a}){super({start(){n.assign(this,{ready:new g((e=>this.resolveReady=e)),password:pt(e,t),signed:i,strength:r-1,pending:new h})},async transform(e,t){const n=this,{password:i,strength:r,resolveReady:s,ready:o}=n;i?(await(async(e,t,n,i)=>{const r=await _t(e,t,n,gt(i,0,$e[t])),a=gt(i,$e[t]);if(r[0]!=a[0]||r[1]!=a[1])throw new f(Ve)})(n,r,i,gt(e,0,$e[r]+2)),e=gt(e,$e[r]+2),a?t.error(new f(Ze)):s()):await o;const l=new h(e.length-tt-(e.length-tt)%je);t.enqueue(wt(n,e,l,0,tt,!0))},async flush(e){const{signed:t,ctr:n,hmac:i,pending:r,ready:a}=this;if(i&&n){await a;const s=gt(r,0,r.length-tt),o=gt(r,r.length-tt);let l=new h;if(s.length){const e=yt(st,s);i.update(e);const t=n.update(e);l=mt(st,t)}if(t){const e=gt(mt(st,i.digest()),0,tt);for(let t=0;tt>t;t++)if(e[t]!=o[t])throw new f(Ke)}e.enqueue(l)}}})}}class ht extends S{constructor({password:e,rawPassword:t,encryptionStrength:i}){let r;super({start(){n.assign(this,{ready:new g((e=>this.resolveReady=e)),password:pt(e,t),strength:i-1,pending:new h})},async transform(e,t){const n=this,{password:i,strength:r,resolveReady:a,ready:s}=n;let o=new h;i?(o=await(async(e,t,n)=>{const i=Ge(new h($e[t]));return bt(i,await _t(e,t,n,i))})(n,r,i),a()):await s;const l=new h(o.length+e.length-e.length%je);l.set(o,0),t.enqueue(wt(n,e,l,o.length,0))},async flush(e){const{ctr:t,hmac:n,pending:i,ready:a}=this;if(n&&t){await a;let s=new h;if(i.length){const e=t.update(yt(st,i));n.update(e),s=mt(st,e)}r.signature=mt(st,n.digest()).slice(0,tt),e.enqueue(bt(s,r.signature))}}}),r=this}}function wt(e,t,n,i,r,a){const{ctr:s,hmac:o,pending:l}=e,c=t.length-r;let d;for(l.length&&(t=bt(l,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new h(t)).set(n,0)}return e})(n,c-c%je)),d=0;c-je>=d;d+=je){const e=yt(st,gt(t,d,d+je));a&&o.update(e);const r=s.update(e);a||o.update(r),n.set(mt(st,r),d+i)}return e.pending=gt(t,d),n}async function _t(e,i,r,a){e.password=null;const s=await(async(e,t,n,i,r)=>{if(!dt)return Be.importKey(t);try{return await rt.importKey("raw",t,n,!1,r)}catch(e){return dt=!1,Be.importKey(t)}})(0,r,Ye,0,Qe),o=await(async(e,t,n)=>{if(!ut)return Be.pbkdf2(t,e.salt,Je.iterations,n);try{return await rt.deriveBits(e,t,n)}catch(i){return ut=!1,Be.pbkdf2(t,e.salt,Je.iterations,n)}})(n.assign({salt:a},Je),s,8*(2*et[i]+2)),l=new h(o),c=yt(st,gt(l,0,et[i])),d=yt(st,gt(l,et[i],2*et[i])),u=gt(l,2*et[i]);return n.assign(e,{keys:{key:c,authentication:d,passwordVerification:u},ctr:new lt(new ot(c),t.from(nt)),hmac:new ct(d)}),u}function pt(e,t){return t===ze?(e=>{if(typeof m==Re){const t=new h((e=unescape(encodeURIComponent(e))).length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}return(new m).encode(e)})(e):t}function bt(e,t){let n=e;return e.length+t.length&&(n=new h(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function gt(e,t,n){return e.subarray(t,n)}function mt(e,t){return e.fromBits(t)}function yt(e,t){return e.toBits(t)}class xt extends S{constructor({password:e,passwordVerification:t,checkPasswordOnly:i}){super({start(){n.assign(this,{password:e,passwordVerification:t}),zt(this,e)},transform(e,t){const n=this;if(n.password){const t=vt(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new f(Ve);e=e.subarray(12)}i?t.error(new f(Ze)):t.enqueue(vt(n,e))}})}}class kt extends S{constructor({password:e,passwordVerification:t}){super({start(){n.assign(this,{password:e,passwordVerification:t}),zt(this,e)},transform(e,t){const n=this;let i,r;if(n.password){n.password=null;const t=Ge(new h(12));t[11]=n.passwordVerification,i=new h(e.length+t.length),i.set(St(n,t),0),r=12}else i=new h(e.length),r=0;i.set(St(n,e),r),t.enqueue(i)}})}}function vt(e,t){const n=new h(t.length);for(let i=0;i<t.length;i++)n[i]=Dt(e)^t[i],Rt(e,n[i]);return n}function St(e,t){const n=new h(t.length);for(let i=0;i<t.length;i++)n[i]=Dt(e)^t[i],Rt(e,t[i]);return n}function zt(e,t){const i=[305419896,591751049,878082192];n.assign(e,{keys:i,crcKey0:new Oe(i[0]),crcKey2:new Oe(i[2])});for(let n=0;n<t.length;n++)Rt(e,t.charCodeAt(n))}function Rt(e,t){let[n,i,r]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=Et(s.imul(Et(i+Tt(n)),134775813)+1),e.crcKey2.append([i>>>24]),r=~e.crcKey2.get(),e.keys=[n,i,r]}function Dt(e){const t=2|e.keys[2];return Tt(s.imul(t,1^t)>>>8)}function Tt(e){return 255&e}function Et(e){return 4294967295&e}const At="deflate-raw";class Ct extends S{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:i}){super({});const{compressed:r,encrypted:a,useCompressionStream:s,zipCrypto:o,signed:l,level:c}=e,d=this;let u,f,h=Ut(super.readable);a&&!o||!l||(u=new Ie,h=Ot(h,u)),r&&(h=Lt(h,s,{level:c,chunkSize:t},i,n)),a&&(o?h=Ot(h,new kt(e)):(f=new ht(e),h=Ot(h,f))),Wt(d,h,(()=>{let e;a&&!o&&(e=f.signature),a&&!o||!l||(e=new p(u.value.buffer).getUint32(0)),d.signature=e}))}}class Ft extends S{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:i}){super({});const{zipCrypto:r,encrypted:a,signed:s,signature:o,compressed:l,useCompressionStream:c}=e;let d,u,h=Ut(super.readable);a&&(r?h=Ot(h,new xt(e)):(u=new ft(e),h=Ot(h,u))),l&&(h=Lt(h,c,{chunkSize:t},i,n)),a&&!r||!s||(d=new Ie,h=Ot(h,d)),Wt(this,h,(()=>{if((!a||r)&&s){const e=new p(d.value.buffer);if(o!=e.getUint32(0,!1))throw new f(Ke)}}))}}function Ut(e){return Ot(e,new S({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function Wt(e,t,i){t=Ot(t,new S({flush:i})),n.defineProperty(e,"readable",{get:()=>t})}function Lt(e,t,n,i,r){try{e=Ot(e,new(t&&i?i:r)(At,n))}catch(i){if(!t)return e;try{e=Ot(e,new r(At,n))}catch(t){return e}}return e}function Ot(e,t){return e.pipeThrough(t)}const It="data",Nt="close",Pt="inflate";class Ht extends S{constructor(e,t){super({});const i=this,{codecType:r}=e;let a;r.startsWith("deflate")?a=Ct:r.startsWith(Pt)&&(a=Ft);let s=0,o=0;const l=new a(e,t),c=super.readable,d=new S({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){n.assign(i,{inputSize:o})}}),u=new S({transform(e,t){e&&e.length&&(s+=e.length,t.enqueue(e))},flush(){const{signature:e}=l;n.assign(i,{signature:e,outputSize:s,inputSize:o})}});n.defineProperty(i,"readable",{get:()=>c.pipeThrough(d).pipeThrough(l).pipeThrough(u)})}}class qt extends S{constructor(e){let t;super({transform:function n(i,r){if(t){const e=new h(t.length+i.length);e.set(t),e.set(i,t.length),i=e,t=null}i.length>e?(r.enqueue(i.slice(0,e)),n(i.slice(e),r)):t=i},flush(e){t&&t.length&&e.enqueue(t)}})}}let Bt=typeof A!=Re;class Mt{constructor(e,{readable:t,writable:i},{options:r,config:a,streamOptions:s,useWebWorkers:o,transferStreams:l,scripts:c},d){const{signal:u}=s;return n.assign(e,{busy:!0,readable:t.pipeThrough(new qt(a.chunkSize)).pipeThrough(new Vt(t,s),{signal:u}),writable:i,options:n.assign({},r),scripts:c,transferStreams:l,terminate:()=>new g((t=>{const{worker:n,busy:i}=e;n?(i?e.resolveTerminated=t:(n.terminate(),t()),e.interface=null):t()})),onTaskFinished(){const{resolveTerminated:t}=e;t&&(e.resolveTerminated=null,e.terminated=!0,e.worker.terminate(),t()),e.busy=!1,d(e)}}),(o&&Bt?Gt:Zt)(e,a)}}class Vt extends S{constructor(e,{onstart:t,onprogress:n,size:i,onend:r}){let a=0;super({async start(){t&&await Kt(t,i)},async transform(e,t){a+=e.length,n&&await Kt(n,a,i),t.enqueue(e)},async flush(){e.size=a,r&&await Kt(r,a)}})}}async function Kt(e,...t){try{await e(...t)}catch(e){}}function Zt(e,t){return{run:()=>(async({options:e,readable:t,writable:n,onTaskFinished:i},r)=>{try{const i=new Ht(e,r);await t.pipeThrough(i).pipeTo(n,{preventClose:!0,preventAbort:!0});const{signature:a,inputSize:s,outputSize:o}=i;return{signature:a,inputSize:s,outputSize:o}}finally{i()}})(e,t)}}function Gt(e,t){const{baseURL:i,chunkSize:r}=t;if(!e.interface){let a;try{a=((e,t,i)=>{const r={type:"module"};let a,s;typeof e==De&&(e=e());try{a=new u(e,t)}catch(t){a=e}if(jt)try{s=new A(a)}catch(e){jt=!1,s=new A(a,r)}else s=new A(a,r);return s.addEventListener("message",(e=>(async({data:e},t)=>{const{type:i,value:r,messageId:a,result:s,error:o}=e,{reader:l,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:w}=t;try{if(o){const{message:e,stack:t,code:i,name:r}=o,a=new f(e);n.assign(a,{stack:t,code:i,name:r}),_(a)}else{if("pull"==i){const{value:e,done:n}=await l.read();Yt({type:It,value:e,done:n,messageId:a},t)}i==It&&(await c.ready,await c.write(new h(r)),Yt({type:"ack",messageId:a},t)),i==Nt&&_(null,s)}}catch(o){Yt({type:Nt,messageId:a},t),_(o)}function _(e,t){e?u(e):d(t),c&&c.releaseLock(),w()}})(e,i))),s})(e.scripts[0],i,e)}catch(n){return Bt=!1,Zt(e,t)}n.assign(e,{worker:a,interface:{run:()=>(async(e,t)=>{let i,r;const a=new g(((e,t)=>{i=e,r=t}));n.assign(e,{reader:null,writer:null,resolveResult:i,rejectResult:r,result:a});const{readable:s,options:o,scripts:l}=e,{writable:c,closed:d}=(e=>{let t;const n=new g((e=>t=e));return{writable:new R({async write(t){const n=e.getWriter();await n.ready,await n.write(t),n.releaseLock()},close(){t()},abort:t=>e.getWriter().abort(t)}),closed:n}})(e.writable),u=Yt({type:"start",scripts:l.slice(1),options:o,config:t,readable:s,writable:c},e);u||n.assign(e,{reader:s.getReader(),writer:c.getWriter()});const f=await a;return u||await c.getWriter().close(),await d,f})(e,{chunkSize:r})}})}return e.interface}let jt=!0,Xt=!0;function Yt(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:r}){try{let{value:n,readable:i,writable:a}=e;const s=[];if(n&&(n.byteLength<n.buffer.byteLength?e.value=n.buffer.slice(0,n.byteLength):e.value=n.buffer,s.push(e.value)),r&&Xt?(i&&s.push(i),a&&s.push(a)):e.readable=e.writable=null,s.length)try{return t.postMessage(e,s),!0}catch(n){Xt=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(e){throw n&&n.releaseLock(),i(),e}}let Jt=[];const Qt=[];let $t=0;function en(e){const{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}const tn="HTTP error ",nn="HTTP Range not supported",rn="Writer iterator completed too soon",an="Content-Length",sn="Range",on="HEAD",ln="GET",cn="bytes",dn=65536,un="writable";class fn{constructor(){this.size=0}init(){this.initialized=!0}}class hn extends fn{get readable(){const e=this,{chunkSize:t=dn}=e,n=new z({start(){this.chunkOffset=0},async pull(i){const{offset:r=0,size:a,diskNumberStart:o}=n,{chunkOffset:l}=this;i.enqueue(await On(e,r+l,s.min(t,a-l),o)),l+t>a?i.close():this.chunkOffset+=t}});return n}}class wn extends fn{constructor(){super();const e=this,t=new R({write:t=>e.writeUint8Array(t)});n.defineProperty(e,un,{get:()=>t})}writeUint8Array(){}}class _n extends hn{constructor(e){super(),n.assign(this,{blob:e,size:e.size})}async readUint8Array(e,t){const n=this,i=e+t,r=e||i<n.size?n.blob.slice(e,i):n.blob;let a=await r.arrayBuffer();return a.byteLength>t&&(a=a.slice(e,i)),new h(a)}}class pn extends fn{constructor(e){super();const t=new S,i=[];e&&i.push(["Content-Type",e]),n.defineProperty(this,un,{get:()=>t.writable}),this.blob=new d(t.readable,{headers:i}).blob()}getData(){return this.blob}}class bn extends hn{constructor(e,t){super(),mn(this,e,t)}async init(){await yn(this,Tn,Sn),super.init()}readUint8Array(e,t){return xn(this,e,t,Tn,Sn)}}class gn extends hn{constructor(e,t){super(),mn(this,e,t)}async init(){await yn(this,En,zn),super.init()}readUint8Array(e,t){return xn(this,e,t,En,zn)}}function mn(e,t,i){const{preventHeadRequest:r,useRangeHeader:a,forceRangeRequests:s,combineSizeEocd:o}=i;delete(i=n.assign({},i)).preventHeadRequest,delete i.useRangeHeader,delete i.forceRangeRequests,delete i.combineSizeEocd,delete i.useXHR,n.assign(e,{url:t,options:i,preventHeadRequest:r,useRangeHeader:a,forceRangeRequests:s,combineSizeEocd:o})}async function yn(e,t,n){const{url:i,preventHeadRequest:a,useRangeHeader:s,forceRangeRequests:o,combineSizeEocd:l}=e;if((e=>{const{baseURL:t}=Fe(),{protocol:n}=new u(e,t);return"http:"==n||"https:"==n})(i)&&(s||o)&&(void 0===a||a)){const i=await t(ln,e,kn(e,l?-22:void 0));if(!o&&i.headers.get("Accept-Ranges")!=cn)throw new f(nn);{let a;l&&(e.eocdCache=new h(await i.arrayBuffer()));const s=i.headers.get("Content-Range");if(s){const e=s.trim().split(/\s*\/\s*/);if(e.length){const t=e[1];t&&"*"!=t&&(a=r(t))}}a===ze?await Dn(e,t,n):e.size=a}}else await Dn(e,t,n)}async function xn(e,t,n,i,r){const{useRangeHeader:a,forceRangeRequests:s,eocdCache:o,size:l,options:c}=e;if(a||s){if(o&&t==l-Se&&n==Se)return o;const r=await i(ln,e,kn(e,t,n));if(206!=r.status)throw new f(nn);return new h(await r.arrayBuffer())}{const{data:i}=e;return i||await r(e,c),new h(e.data.subarray(t,t+n))}}function kn(e,t=0,i=1){return n.assign({},vn(e),{[sn]:cn+"="+(0>t?t:t+"-"+(t+i-1))})}function vn({options:e}){const{headers:t}=e;if(t)return Symbol.iterator in t?n.fromEntries(t):t}async function Sn(e){await Rn(e,Tn)}async function zn(e){await Rn(e,En)}async function Rn(e,t){const n=await t(ln,e,vn(e));e.data=new h(await n.arrayBuffer()),e.size||(e.size=e.data.length)}async function Dn(e,t,n){if(e.preventHeadRequest)await n(e,e.options);else{const i=(await t(on,e,vn(e))).headers.get(an);i?e.size=r(i):await n(e,e.options)}}async function Tn(e,{options:t,url:i},r){const a=await fetch(i,n.assign({},t,{method:e,headers:r}));if(400>a.status)return a;throw 416==a.status?new f(nn):new f(tn+(a.statusText||a.status))}function En(e,{url:t},i){return new g(((r,a)=>{const s=new XMLHttpRequest;if(s.addEventListener("load",(()=>{if(400>s.status){const e=[];s.getAllResponseHeaders().trim().split(/[\r\n]+/).forEach((t=>{const n=t.trim().split(/\s*:\s*/);n[0]=n[0].trim().replace(/^[a-z]|-[a-z]/g,(e=>e.toUpperCase())),e.push(n)})),r({status:s.status,arrayBuffer:()=>s.response,headers:new l(e)})}else a(416==s.status?new f(nn):new f(tn+(s.statusText||s.status)))}),!1),s.addEventListener("error",(e=>a(e.detail?e.detail.error:new f("Network error"))),!1),s.open(e,t),i)for(const e of n.entries(i))s.setRequestHeader(e[0],e[1]);s.responseType="arraybuffer",s.send()}))}class An extends hn{constructor(e,t={}){super(),n.assign(this,{url:e,reader:t.useXHR?new gn(e,t):new bn(e,t)})}set size(e){}get size(){return this.reader.size}async init(){await this.reader.init(),super.init()}readUint8Array(e,t){return this.reader.readUint8Array(e,t)}}class Cn extends hn{constructor(e){super(),this.readers=e}async init(){const e=this,{readers:t}=e;e.lastDiskNumber=0,e.lastDiskOffset=0,await g.all(t.map((async(n,i)=>{await n.init(),i!=t.length-1&&(e.lastDiskOffset+=n.size),e.size+=n.size}))),super.init()}async readUint8Array(e,t,n=0){const i=this,{readers:r}=this;let a,o=n;-1==o&&(o=r.length-1);let l=e;for(;l>=r[o].size;)l-=r[o].size,o++;const c=r[o],d=c.size;if(l+t>d){const r=d-l;a=new h(t),a.set(await On(c,l,r)),a.set(await i.readUint8Array(e+r,t-r,n),r)}else a=await On(c,l,t);return i.lastDiskNumber=s.max(o,i.lastDiskNumber),a}}class Fn extends fn{constructor(e,t=4294967295){super();const i=this;let r,a,s;n.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:t,availableSize:t});const o=new R({async write(t){const{availableSize:n}=i;if(s)t.length<n?await l(t):(await l(t.slice(0,n)),await c(),i.diskOffset+=r.size,i.diskNumber++,s=null,await this.write(t.slice(n)));else{const{value:n,done:o}=await e.next();if(o&&!n)throw new f(rn);r=n,r.size=0,r.maxSize&&(i.maxSize=r.maxSize),i.availableSize=i.maxSize,await Un(r),a=n.writable,s=a.getWriter(),await this.write(t)}},async close(){await s.ready,await c()}});async function l(e){const t=e.length;t&&(await s.ready,await s.write(e),r.size+=t,i.size+=t,i.availableSize-=t)}async function c(){a.size=r.size,await s.close()}n.defineProperty(i,un,{get:()=>o})}}async function Un(e,t){if(!e.init||e.initialized)return g.resolve();await e.init(t)}function Wn(e){return t.isArray(e)&&(e=new Cn(e)),e instanceof z&&(e={readable:e}),e}function Ln(e){e.writable===ze&&typeof e.next==De&&(e=new Fn(e)),e instanceof R&&(e={writable:e});const{writable:t}=e;return t.size===ze&&(t.size=0),e instanceof Fn||n.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function On(e,t,n,i){return e.readUint8Array(t,n,i)}const In=Cn,Nn=Fn,Pn="\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ".split(""),Hn=256==Pn.length;function qn(e,t){return t&&"cp437"==t.trim().toLowerCase()?(e=>{if(Hn){let t="";for(let n=0;n<e.length;n++)t+=Pn[e[n]];return t}return(new y).decode(e)})(e):new y(t).decode(e)}const Bn="filename",Mn="rawFilename",Vn="comment",Kn="rawComment",Zn="uncompressedSize",Gn="compressedSize",jn="offset",Xn="diskNumberStart",Yn="lastModDate",Jn="rawLastModDate",Qn="lastAccessDate",$n="creationDate",ei=[Bn,Mn,Gn,Zn,Yn,Jn,Vn,Kn,Qn,$n,jn,Xn,Xn,"internalFileAttribute","externalFileAttribute","msDosCompatible","zip64","encrypted","version","versionMadeBy","zipCrypto","directory","bitFlag","signature","filenameUTF8","commentUTF8","compressionMethod","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"];class ti{constructor(e){ei.forEach((t=>this[t]=e[t]))}}const ni="File format is not recognized",ii="End of central directory not found",ri="End of Zip64 central directory locator not found",ai="Central directory header not found",si="Local file header not found",oi="Zip64 extra field not found",li="File contains encrypted entry",ci="Encryption method not supported",di="Compression method not supported",ui="Split zip file",fi="utf-8",hi="cp437",wi=[[Zn,ye],[Gn,ye],[jn,ye],[Xn,xe]],_i={[xe]:{getValue:Ri,bytes:4},[ye]:{getValue:Di,bytes:8}};class pi{constructor(e,t={}){n.assign(this,{reader:Wn(e),options:t,config:Fe()})}async*getEntriesGenerator(e={}){const t=this;let{reader:i}=t;const{config:r}=t;if(await Un(i),i.size!==ze&&i.readUint8Array||(i=new _n(await new d(i.readable).blob()),await Un(i)),i.size<Se)throw new f(ni);i.chunkSize=(e=>s.max(e.chunkSize,64))(r);const a=await(async(e,t,n)=>{const i=new h(4);return Ti(i).setUint32(0,101010256,!0),await r(22)||await r(s.min(1048582,n));async function r(t){const r=n-t,a=await On(e,r,t);for(let e=a.length-22;e>=0;e--)if(a[e]==i[0]&&a[e+1]==i[1]&&a[e+2]==i[2]&&a[e+3]==i[3])return{offset:r+e,buffer:a.slice(e,e+22).buffer}}})(i,0,i.size);if(!a)throw 134695760==Ri(Ti(await On(i,0,4)))?new f(ui):new f(ii);const o=Ti(a);let l=Ri(o,12),c=Ri(o,16);const u=a.offset,w=zi(o,20),_=u+Se+w;let p=zi(o,4);const b=i.lastDiskNumber||0;let g=zi(o,6),m=zi(o,8),y=0,x=0;if(c==ye||l==ye||m==xe||g==xe){const e=Ti(await On(i,a.offset-20,20));if(117853008==Ri(e,0)){c=Di(e,8);let t=await On(i,c,56,-1),n=Ti(t);const r=a.offset-20-56;if(Ri(n,0)!=ve&&c!=r){const e=c;c=r,y=c-e,t=await On(i,c,56,-1),n=Ti(t)}if(Ri(n,0)!=ve)throw new f(ri);p==xe&&(p=Ri(n,16)),g==xe&&(g=Ri(n,20)),m==xe&&(m=Di(n,32)),l==ye&&(l=Di(n,40)),c-=l}}if(c<i.size||(y=i.size-c-l-Se,c=i.size-l-Se),b!=p)throw new f(ui);if(0>c)throw new f(ni);let k=0,v=await On(i,c,l,g),S=Ti(v);if(l){const e=a.offset-l;if(Ri(S,k)!=ke&&c!=e){const t=c;c=e,y+=c-t,v=await On(i,c,l,g),S=Ti(v)}}const z=a.offset-c-(i.lastDiskOffset||0);if(l==z||0>z||(l=z,v=await On(i,c,l,g),S=Ti(v)),0>c||c>=i.size)throw new f(ni);const R=xi(t,e,"filenameEncoding"),D=xi(t,e,"commentEncoding");for(let a=0;m>a;a++){const o=new bi(i,r,t.options);if(Ri(S,k)!=ke)throw new f(ai);gi(o,S,k+6);const l=!!o.bitFlag.languageEncodingFlag,c=k+46,d=c+o.filenameLength,u=d+o.extraFieldLength,h=zi(S,k+4),w=!0,_=v.subarray(c,d),p=zi(S,k+32),b=u+p,g=v.subarray(u,b),z=l,T=l,E=w&&!(16&~Si(S,k+38)),A=Ri(S,k+42)+y;n.assign(o,{versionMadeBy:h,msDosCompatible:w,compressedSize:0,uncompressedSize:0,commentLength:p,directory:E,offset:A,diskNumberStart:zi(S,k+34),internalFileAttribute:zi(S,k+36),externalFileAttribute:Ri(S,k+38),rawFilename:_,filenameUTF8:z,commentUTF8:T,rawExtraField:v.subarray(d,u)});const C=xi(t,e,"decodeText")||qn,F=z?fi:R||hi,U=T?fi:D||hi;let W=C(_,F);W===ze&&(W=qn(_,F));let L=C(g,U);L===ze&&(L=qn(g,U)),n.assign(o,{rawComment:g,filename:W,comment:L,directory:E||W.endsWith("/")}),x=s.max(A,x),await mi(o,o,S,k+6),o.zipCrypto=o.encrypted&&!o.extraFieldAES;const O=new ti(o);O.getData=(e,t)=>o.getData(e,O,t),k=b;const{onprogress:I}=e;if(I)try{await I(a+1,m,new ti(o))}catch(e){}yield O}const T=xi(t,e,"extractPrependedData"),E=xi(t,e,"extractAppendedData");return T&&(t.prependedData=x>0?await On(i,0,x):new h),t.comment=w?await On(i,u+Se,w):new h,E&&(t.appendedData=_<i.size?await On(i,_,i.size-_):new h),!0}async getEntries(e={}){const t=[];for await(const n of this.getEntriesGenerator(e))t.push(n);return t}async close(){}}class bi{constructor(e,t,i){n.assign(this,{reader:e,config:t,options:i})}async getData(e,t,i={}){const a=this,{reader:s,offset:o,diskNumberStart:l,extraFieldAES:c,compressionMethod:d,config:u,bitFlag:w,signature:_,rawLastModDate:p,uncompressedSize:b,compressedSize:m}=a,y=t.localDirectory={},x=Ti(await On(s,o,30,l));let k=xi(a,i,"password"),v=xi(a,i,"rawPassword");const S=xi(a,i,"passThrough");if(k=k&&k.length&&k,v=v&&v.length&&v,c&&99!=c.originalCompressionMethod)throw new f(di);if(0!=d&&8!=d&&!S)throw new f(di);if(67324752!=Ri(x,0))throw new f(si);gi(y,x,4),y.rawExtraField=y.extraFieldLength?await On(s,o+30+y.filenameLength,y.extraFieldLength,l):new h,await mi(a,y,x,4,!0),n.assign(t,{lastAccessDate:y.lastAccessDate,creationDate:y.creationDate});const z=a.encrypted&&y.encrypted&&!S,D=z&&!c;if(S||(t.zipCrypto=D),z){if(!D&&c.strength===ze)throw new f(ci);if(!k&&!v)throw new f(li)}const T=o+30+y.filenameLength+y.extraFieldLength,E=m,A=s.readable;n.assign(A,{diskNumberStart:l,offset:T,size:E});const C=xi(a,i,"signal"),F=xi(a,i,"checkPasswordOnly");F&&(e=new R),e=Ln(e),await Un(e,S?m:b);const{writable:U}=e,{onstart:W,onprogress:L,onend:O}=i,I={options:{codecType:Pt,password:k,rawPassword:v,zipCrypto:D,encryptionStrength:c&&c.strength,signed:xi(a,i,"checkSignature")&&!S,passwordVerification:D&&(w.dataDescriptor?p>>>8&255:_>>>24&255),signature:_,compressed:0!=d&&!S,encrypted:a.encrypted&&!S,useWebWorkers:xi(a,i,"useWebWorkers"),useCompressionStream:xi(a,i,"useCompressionStream"),transferStreams:xi(a,i,"transferStreams"),checkPasswordOnly:F},config:u,streamOptions:{signal:C,size:E,onstart:W,onprogress:L,onend:O}};let N=0;try{({outputSize:N}=await(async(e,t)=>{const{options:n,config:i}=t,{transferStreams:a,useWebWorkers:s,useCompressionStream:o,codecType:l,compressed:c,signed:d,encrypted:u}=n,{workerScripts:f,maxWorkers:h}=i;t.transferStreams=a||a===ze;const w=!(c||d||u||t.transferStreams);return t.useWebWorkers=!w&&(s||s===ze&&i.useWebWorkers),t.scripts=t.useWebWorkers&&f?f[l]:[],n.useCompressionStream=o||o===ze&&i.useCompressionStream,(await(async()=>{const n=Jt.find((e=>!e.busy));if(n)return en(n),new Mt(n,e,t,_);if(Jt.length<h){const n={indexWorker:$t};return $t++,Jt.push(n),new Mt(n,e,t,_)}return new g((n=>Qt.push({resolve:n,stream:e,workerOptions:t})))})()).run();function _(e){if(Qt.length){const[{resolve:t,stream:n,workerOptions:i}]=Qt.splice(0,1);t(new Mt(e,n,i,_))}else e.worker?(en(e),((e,t)=>{const{config:n}=t,{terminateWorkerTimeout:i}=n;r.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout((async()=>{Jt=Jt.filter((t=>t!=e));try{await e.terminate()}catch(e){}}),i))})(e,t)):Jt=Jt.filter((t=>t!=e))}})({readable:A,writable:U},I))}catch(e){if(!F||e.message!=Ze)throw e}finally{const e=xi(a,i,"preventClose");U.size+=N,e||U.locked||await U.getWriter().close()}return F?ze:e.getData?e.getData():U}}function gi(e,t,i){const r=e.rawBitFlag=zi(t,i+2),a=!(1&~r),s=Ri(t,i+6);n.assign(e,{encrypted:a,version:zi(t,i),bitFlag:{level:(6&r)>>1,dataDescriptor:!(8&~r),languageEncodingFlag:!(2048&~r)},rawLastModDate:s,lastModDate:ki(s),filenameLength:zi(t,i+22),extraFieldLength:zi(t,i+24)})}async function mi(e,t,i,r,a){const{rawExtraField:s}=t,c=t.extraField=new l,d=Ti(new h(s));let u=0;try{for(;u<s.length;){const e=zi(d,u),t=zi(d,u+2);c.set(e,{type:e,data:s.slice(u+4,u+4+t)}),u+=4+t}}catch(e){}const w=zi(i,r+4);n.assign(t,{signature:Ri(i,r+10),uncompressedSize:Ri(i,r+18),compressedSize:Ri(i,r+14)});const _=c.get(1);_&&(((e,t)=>{t.zip64=!0;const n=Ti(e.data),i=wi.filter((([e,n])=>t[e]==n));for(let r=0,a=0;r<i.length;r++){const[s,o]=i[r];if(t[s]==o){const i=_i[o];t[s]=e[s]=i.getValue(n,a),a+=i.bytes}else if(e[s])throw new f(oi)}})(_,t),t.extraFieldZip64=_);const p=c.get(28789);p&&(await yi(p,Bn,Mn,t,e),t.extraFieldUnicodePath=p);const b=c.get(25461);b&&(await yi(b,Vn,Kn,t,e),t.extraFieldUnicodeComment=b);const g=c.get(39169);g?(((e,t,i)=>{const r=Ti(e.data),a=Si(r,4);n.assign(e,{vendorVersion:Si(r,0),vendorId:Si(r,2),strength:a,originalCompressionMethod:i,compressionMethod:zi(r,5)}),t.compressionMethod=e.compressionMethod})(g,t,w),t.extraFieldAES=g):t.compressionMethod=w;const m=c.get(10);m&&(((e,t)=>{const i=Ti(e.data);let r,a=4;try{for(;a<e.data.length&&!r;){const t=zi(i,a),n=zi(i,a+2);1==t&&(r=e.data.slice(a+4,a+4+n)),a+=4+n}}catch(e){}try{if(r&&24==r.length){const i=Ti(r),a=i.getBigUint64(0,!0),s=i.getBigUint64(8,!0),o=i.getBigUint64(16,!0);n.assign(e,{rawLastModDate:a,rawLastAccessDate:s,rawCreationDate:o});const l={lastModDate:vi(a),lastAccessDate:vi(s),creationDate:vi(o)};n.assign(e,l),n.assign(t,l)}}catch(e){}})(m,t),t.extraFieldNTFS=m);const y=c.get(21589);y&&(((e,t,n)=>{const i=Ti(e.data),r=Si(i,0),a=[],s=[];n?(1&~r||(a.push(Yn),s.push(Jn)),2&~r||(a.push(Qn),s.push("rawLastAccessDate")),4&~r||(a.push($n),s.push("rawCreationDate"))):5>e.data.length||(a.push(Yn),s.push(Jn));let l=1;a.forEach(((n,r)=>{if(e.data.length>=l+4){const a=Ri(i,l);t[n]=e[n]=new o(1e3*a);const c=s[r];e[c]=a}l+=4}))})(y,t,a),t.extraFieldExtendedTimestamp=y);const x=c.get(6534);x&&(t.extraFieldUSDZ=x)}async function yi(e,t,i,r,a){const s=Ti(e.data),o=new Oe;o.append(a[i]);const l=Ti(new h(4));l.setUint32(0,o.get(),!0);const c=Ri(s,1);n.assign(e,{version:Si(s,0),[t]:qn(e.data.subarray(5)),valid:!a.bitFlag.languageEncodingFlag&&c==Ri(l,0)}),e.valid&&(r[t]=e[t],r[t+"UTF8"]=!0)}function xi(e,t,n){return t[n]===ze?e.options[n]:t[n]}function ki(e){const t=(4294901760&e)>>16,n=65535&e;try{return new o(1980+((65024&t)>>9),((480&t)>>5)-1,31&t,(63488&n)>>11,(2016&n)>>5,2*(31&n),0)}catch(e){}}function vi(e){return new o(r(e/a(1e4)-a(116444736e5)))}function Si(e,t){return e.getUint8(t)}function zi(e,t){return e.getUint16(t,!0)}function Ri(e,t){return e.getUint32(t,!0)}function Di(e,t){return r(e.getBigUint64(t,!0))}function Ti(e){return new p(e.buffer)}Ue({Inflate:function(e){const t=new me,n=e&&e.chunkSize?s.floor(2*e.chunkSize):131072,i=new h(n);let r=!1;t.inflateInit(),t.next_out=i,this.append=(e,a)=>{const s=[];let o,l,c=0,d=0,u=0;if(0!==e.length){t.next_in_index=0,t.next_in=e,t.avail_in=e.length;do{if(t.next_out_index=0,t.avail_out=n,0!==t.avail_in||r||(t.next_in_index=0,r=!0),o=t.inflate(0),r&&o===O){if(0!==t.avail_in)throw new f("inflating: bad input")}else if(o!==C&&o!==F)throw new f("inflating: "+t.msg);if((r||o===F)&&t.avail_in===e.length)throw new f("inflating: bad input");t.next_out_index&&(t.next_out_index===n?s.push(new h(i)):s.push(i.subarray(0,t.next_out_index))),u+=t.next_out_index,a&&t.next_in_index>0&&t.next_in_index!=c&&(a(t.next_in_index),c=t.next_in_index)}while(t.avail_in>0||0===t.avail_out);return s.length>1?(l=new h(u),s.forEach((e=>{l.set(e,d),d+=e.length}))):l=s[0]?new h(s[0]):new h,l}},this.flush=()=>{t.inflateEnd()}}}),e.BlobReader=_n,e.BlobWriter=pn,e.Data64URIReader=class extends hn{constructor(e){super();let t=e.length;for(;"="==e.charAt(t-1);)t--;const i=e.indexOf(",")+1;n.assign(this,{dataURI:e,dataStart:i,size:s.floor(.75*(t-i))})}readUint8Array(e,t){const{dataStart:n,dataURI:i}=this,r=new h(t),a=4*s.floor(e/3),o=atob(i.substring(a+n,4*s.ceil((e+t)/3)+n)),l=e-3*s.floor(a/4);for(let e=l;l+t>e;e++)r[e-l]=o.charCodeAt(e);return r}},e.Data64URIWriter=class extends wn{constructor(e){super(),n.assign(this,{data:"data:"+(e||"")+";base64,",pending:[]})}writeUint8Array(e){const t=this;let n=0,r=t.pending;const a=t.pending.length;for(t.pending="",n=0;n<3*s.floor((a+e.length)/3)-a;n++)r+=i.fromCharCode(e[n]);for(;n<e.length;n++)t.pending+=i.fromCharCode(e[n]);r.length>2?t.data+=v(r):t.pending=r}getData(){return this.data+v(this.pending)}},e.ERR_BAD_FORMAT=ni,e.ERR_CENTRAL_DIRECTORY_NOT_FOUND=ai,e.ERR_ENCRYPTED=li,e.ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND=ri,e.ERR_EOCDR_NOT_FOUND=ii,e.ERR_EXTRAFIELD_ZIP64_NOT_FOUND=oi,e.ERR_HTTP_RANGE=nn,e.ERR_INVALID_PASSWORD=Ve,e.ERR_INVALID_SIGNATURE=Ke,e.ERR_ITERATOR_COMPLETED_TOO_SOON=rn,e.ERR_LOCAL_FILE_HEADER_NOT_FOUND=si,e.ERR_SPLIT_ZIP_FILE=ui,e.ERR_UNSUPPORTED_COMPRESSION=di,e.ERR_UNSUPPORTED_ENCRYPTION=ci,e.HttpRangeReader=class extends An{constructor(e,t={}){t.useRangeHeader=!0,super(e,t)}},e.HttpReader=An,e.Reader=hn,e.SplitDataReader=Cn,e.SplitDataWriter=Fn,e.SplitZipReader=In,e.SplitZipWriter=Nn,e.TextReader=class extends _n{constructor(e){super(new b([e],{type:"text/plain"}))}},e.TextWriter=class extends pn{constructor(e){super(e),n.assign(this,{encoding:e,utf8:!e||"utf-8"==e.toLowerCase()})}async getData(){const{encoding:e,utf8:t}=this,i=await super.getData();if(i.text&&t)return i.text();{const t=new FileReader;return new g(((r,a)=>{n.assign(t,{onload:({target:e})=>r(e.result),onerror:()=>a(t.error)}),t.readAsText(i,e)}))}}},e.Uint8ArrayReader=class extends hn{constructor(e){super(),n.assign(this,{array:e,size:e.length})}readUint8Array(e,t){return this.array.slice(e,e+t)}},e.Uint8ArrayWriter=class extends wn{init(e=0){n.assign(this,{offset:0,array:new h(e)}),super.init()}writeUint8Array(e){const t=this;if(t.offset+e.length>t.array.length){const n=t.array;t.array=new h(n.length+e.length),t.array.set(n)}t.array.set(e,t.offset),t.offset+=e.length}getData(){return this.array}},e.Writer=wn,e.ZipReader=pi,e.ZipReaderStream=class{constructor(e={}){const{readable:t,writable:n}=new S,i=new pi(t,e).getEntriesGenerator();this.readable=new z({async pull(e){const{done:t,value:n}=await i.next();if(t)return e.close();const r={...n,readable:(()=>{const{readable:e,writable:t}=new S;if(n.getData)return n.getData(t),e})()};delete r.getData,e.enqueue(r)}}),this.writable=n}},e.configure=Ue,e.getMimeType=()=>"application/octet-stream",e.initReader=Wn,e.initStream=Un,e.initWriter=Ln,e.readUint8Array=On,e.terminateWorkers=async()=>{await g.allSettled(Jt.map((e=>(en(e),e.terminate()))))}}));

@@ -410,3 +410,3 @@ /**

*/
constructor(url: URLString, options?: HttpOptions);
constructor(url: URLString | URL, options?: HttpOptions);
}

@@ -424,3 +424,3 @@

*/
constructor(url: URLString, options?: HttpRangeOptions);
constructor(url: URLString | URL, options?: HttpRangeOptions);
}

@@ -811,3 +811,3 @@

*/
checkPasswordOnly: boolean;
checkPasswordOnly?: boolean;
/**

@@ -965,2 +965,6 @@ * `true` to check the signature of the entry.

diskNumberStart: number;
/**
* The compression method.
*/
compressionMethod: number;
}

@@ -1384,2 +1388,6 @@

/**
* The compression method (e.g. 8 for DEFLATE, 0 for STORE).
*/
compressionMethod?: number
/**
* Encode the filename and the comment of the entry.

@@ -1386,0 +1394,0 @@ *

@@ -745,9 +745,2 @@ /*

} = child.data;
let level, encryptionStrength;
if (compressionMethod === 0) {
level = 0;
}
if (extraFieldAES) {
encryptionStrength = extraFieldAES.strength;
}
zipEntryOptions = {

@@ -762,2 +755,9 @@ externalFileAttribute,

if (child.passThrough) {
let level, encryptionStrength;
if (compressionMethod === 0) {
level = 0;
}
if (extraFieldAES) {
encryptionStrength = extraFieldAES.strength;
}
zipEntryOptions = Object.assign(zipEntryOptions, {

@@ -770,3 +770,4 @@ passThrough: true,

level,
encryptionStrength
encryptionStrength,
compressionMethod
});

@@ -773,0 +774,0 @@ }

@@ -410,2 +410,3 @@ /*

let rawPassword = getOptionValue(zipEntry, options, "rawPassword");
const passThrough = getOptionValue(zipEntry, options, "passThrough");
password = password && password.length && password;

@@ -418,3 +419,3 @@ rawPassword = rawPassword && rawPassword.length && rawPassword;

}
if (compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE) {
if ((compressionMethod != COMPRESSION_METHOD_STORE && compressionMethod != COMPRESSION_METHOD_DEFLATE) && !passThrough) {
throw new Error(ERR_UNSUPPORTED_COMPRESSION);

@@ -434,3 +435,2 @@ }

});
const passThrough = getOptionValue(zipEntry, options, "passThrough");
const encrypted = zipEntry.encrypted && localDirectory.encrypted && !passThrough;

@@ -462,3 +462,3 @@ const zipCrypto = encrypted && !extraFieldAES;

writer = initWriter(writer);
await initStream(writer, uncompressedSize);
await initStream(writer, passThrough ? compressedSize : uncompressedSize);
const { writable } = writer;

@@ -465,0 +465,0 @@ const { onstart, onprogress, onend } = options;

@@ -280,2 +280,3 @@ /*

const useCompressionStream = getOptionValue(zipWriter, options, "useCompressionStream");
const compressionMethod = getOptionValue(zipWriter, options, "compressionMethod");
let dataDescriptor = getOptionValue(zipWriter, options, "dataDescriptor", true);

@@ -383,3 +384,4 @@ let zip64 = getOptionValue(zipWriter, options, PROPERTY_NAME_ZIP64);

encrypted: Boolean((password && getLength(password)) || (rawPassword && getLength(rawPassword))) || (passThrough && encrypted),
signature
signature,
compressionMethod
});

@@ -732,3 +734,3 @@ const headerInfo = getHeaderInfo(options);

const compressed = level !== 0 && !directory;
let version = options.version;
let { version, compressionMethod } = options;
let rawExtraFieldAES;

@@ -788,5 +790,6 @@ if (encrypted && !zipCrypto) {

}
let compressionMethod = COMPRESSION_METHOD_STORE;
if (compressionMethod === UNDEFINED_VALUE) {
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
}
if (compressed) {
compressionMethod = COMPRESSION_METHOD_DEFLATE;
if (level >= 1 && level < 3) {

@@ -809,6 +812,4 @@ bitFlag = bitFlag | 0b110;

version = version > VERSION_AES ? version : VERSION_AES;
rawExtraFieldAES[9] = compressionMethod;
compressionMethod = COMPRESSION_METHOD_AES;
if (compressed) {
rawExtraFieldAES[9] = COMPRESSION_METHOD_DEFLATE;
}
}

@@ -815,0 +816,0 @@ }

@@ -6,3 +6,3 @@ {

"license": "BSD-3-Clause",
"version": "2.7.51",
"version": "2.7.52",
"type": "module",

@@ -9,0 +9,0 @@ "keywords": [

@@ -23,12 +23,20 @@ /*! *****************************************************************************

interface FileSystemDirectoryHandleAsyncIterator<T> extends AsyncIteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<T>;
}
interface FileSystemDirectoryHandle {
[Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>;
entries(): AsyncIterableIterator<[string, FileSystemHandle]>;
keys(): AsyncIterableIterator<string>;
values(): AsyncIterableIterator<FileSystemHandle>;
[Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>;
entries(): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>;
keys(): FileSystemDirectoryHandleAsyncIterator<string>;
values(): FileSystemDirectoryHandleAsyncIterator<FileSystemHandle>;
}
interface ReadableStreamAsyncIterator<T> extends AsyncIteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.asyncIterator](): ReadableStreamAsyncIterator<T>;
}
interface ReadableStream<R = any> {
[Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): AsyncIterableIterator<R>;
values(options?: ReadableStreamIteratorOptions): AsyncIterableIterator<R>;
[Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;
values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;
}

@@ -44,32 +44,32 @@ /*! *****************************************************************************

interface CSSKeyframesRule {
[Symbol.iterator](): IterableIterator<CSSKeyframeRule>;
[Symbol.iterator](): ArrayIterator<CSSKeyframeRule>;
}
interface CSSNumericArray {
[Symbol.iterator](): IterableIterator<CSSNumericValue>;
entries(): IterableIterator<[number, CSSNumericValue]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSNumericValue>;
[Symbol.iterator](): ArrayIterator<CSSNumericValue>;
entries(): ArrayIterator<[number, CSSNumericValue]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSNumericValue>;
}
interface CSSRuleList {
[Symbol.iterator](): IterableIterator<CSSRule>;
[Symbol.iterator](): ArrayIterator<CSSRule>;
}
interface CSSStyleDeclaration {
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
}
interface CSSTransformValue {
[Symbol.iterator](): IterableIterator<CSSTransformComponent>;
entries(): IterableIterator<[number, CSSTransformComponent]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSTransformComponent>;
[Symbol.iterator](): ArrayIterator<CSSTransformComponent>;
entries(): ArrayIterator<[number, CSSTransformComponent]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSTransformComponent>;
}
interface CSSUnparsedValue {
[Symbol.iterator](): IterableIterator<CSSUnparsedSegment>;
entries(): IterableIterator<[number, CSSUnparsedSegment]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSUnparsedSegment>;
[Symbol.iterator](): ArrayIterator<CSSUnparsedSegment>;
entries(): ArrayIterator<[number, CSSUnparsedSegment]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSUnparsedSegment>;
}

@@ -96,18 +96,18 @@

interface DOMRectList {
[Symbol.iterator](): IterableIterator<DOMRect>;
[Symbol.iterator](): ArrayIterator<DOMRect>;
}
interface DOMStringList {
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
}
interface DOMTokenList {
[Symbol.iterator](): IterableIterator<string>;
entries(): IterableIterator<[number, string]>;
keys(): IterableIterator<number>;
values(): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
entries(): ArrayIterator<[number, string]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<string>;
}
interface DataTransferItemList {
[Symbol.iterator](): IterableIterator<DataTransferItem>;
[Symbol.iterator](): ArrayIterator<DataTransferItem>;
}

@@ -119,3 +119,3 @@

interface FileList {
[Symbol.iterator](): IterableIterator<File>;
[Symbol.iterator](): ArrayIterator<File>;
}

@@ -126,40 +126,48 @@

interface FormDataIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): FormDataIterator<T>;
}
interface FormData {
[Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
[Symbol.iterator](): FormDataIterator<[string, FormDataEntryValue]>;
/** Returns an array of key, value pairs for every entry in the list. */
entries(): IterableIterator<[string, FormDataEntryValue]>;
entries(): FormDataIterator<[string, FormDataEntryValue]>;
/** Returns a list of keys in the list. */
keys(): IterableIterator<string>;
keys(): FormDataIterator<string>;
/** Returns a list of values in the list. */
values(): IterableIterator<FormDataEntryValue>;
values(): FormDataIterator<FormDataEntryValue>;
}
interface HTMLAllCollection {
[Symbol.iterator](): IterableIterator<Element>;
[Symbol.iterator](): ArrayIterator<Element>;
}
interface HTMLCollectionBase {
[Symbol.iterator](): IterableIterator<Element>;
[Symbol.iterator](): ArrayIterator<Element>;
}
interface HTMLCollectionOf<T extends Element> {
[Symbol.iterator](): IterableIterator<T>;
[Symbol.iterator](): ArrayIterator<T>;
}
interface HTMLFormElement {
[Symbol.iterator](): IterableIterator<Element>;
[Symbol.iterator](): ArrayIterator<Element>;
}
interface HTMLSelectElement {
[Symbol.iterator](): IterableIterator<HTMLOptionElement>;
[Symbol.iterator](): ArrayIterator<HTMLOptionElement>;
}
interface HeadersIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): HeadersIterator<T>;
}
interface Headers {
[Symbol.iterator](): IterableIterator<[string, string]>;
[Symbol.iterator](): HeadersIterator<[string, string]>;
/** Returns an iterator allowing to go through all key/value pairs contained in this object. */
entries(): IterableIterator<[string, string]>;
entries(): HeadersIterator<[string, string]>;
/** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */
keys(): IterableIterator<string>;
keys(): HeadersIterator<string>;
/** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */
values(): IterableIterator<string>;
values(): HeadersIterator<string>;
}

@@ -204,19 +212,19 @@

interface MediaKeyStatusMapIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): MediaKeyStatusMapIterator<T>;
}
interface MediaKeyStatusMap {
[Symbol.iterator](): IterableIterator<[BufferSource, MediaKeyStatus]>;
entries(): IterableIterator<[BufferSource, MediaKeyStatus]>;
keys(): IterableIterator<BufferSource>;
values(): IterableIterator<MediaKeyStatus>;
[Symbol.iterator](): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>;
entries(): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>;
keys(): MediaKeyStatusMapIterator<BufferSource>;
values(): MediaKeyStatusMapIterator<MediaKeyStatus>;
}
interface MediaList {
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
}
interface MessageEvent<T = any> {
/**
* @deprecated
*
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent)
*/
/** @deprecated */
initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;

@@ -226,7 +234,7 @@ }

interface MimeTypeArray {
[Symbol.iterator](): IterableIterator<MimeType>;
[Symbol.iterator](): ArrayIterator<MimeType>;
}
interface NamedNodeMap {
[Symbol.iterator](): IterableIterator<Attr>;
[Symbol.iterator](): ArrayIterator<Attr>;
}

@@ -246,27 +254,27 @@

interface NodeList {
[Symbol.iterator](): IterableIterator<Node>;
[Symbol.iterator](): ArrayIterator<Node>;
/** Returns an array of key, value pairs for every entry in the list. */
entries(): IterableIterator<[number, Node]>;
entries(): ArrayIterator<[number, Node]>;
/** Returns an list of keys in the list. */
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/** Returns an list of values in the list. */
values(): IterableIterator<Node>;
values(): ArrayIterator<Node>;
}
interface NodeListOf<TNode extends Node> {
[Symbol.iterator](): IterableIterator<TNode>;
[Symbol.iterator](): ArrayIterator<TNode>;
/** Returns an array of key, value pairs for every entry in the list. */
entries(): IterableIterator<[number, TNode]>;
entries(): ArrayIterator<[number, TNode]>;
/** Returns an list of keys in the list. */
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/** Returns an list of values in the list. */
values(): IterableIterator<TNode>;
values(): ArrayIterator<TNode>;
}
interface Plugin {
[Symbol.iterator](): IterableIterator<MimeType>;
[Symbol.iterator](): ArrayIterator<MimeType>;
}
interface PluginArray {
[Symbol.iterator](): IterableIterator<Plugin>;
[Symbol.iterator](): ArrayIterator<Plugin>;
}

@@ -276,3 +284,3 @@

/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/setCodecPreferences) */
setCodecPreferences(codecs: Iterable<RTCRtpCodecCapability>): void;
setCodecPreferences(codecs: Iterable<RTCRtpCodec>): void;
}

@@ -284,42 +292,46 @@

interface SVGLengthList {
[Symbol.iterator](): IterableIterator<SVGLength>;
[Symbol.iterator](): ArrayIterator<SVGLength>;
}
interface SVGNumberList {
[Symbol.iterator](): IterableIterator<SVGNumber>;
[Symbol.iterator](): ArrayIterator<SVGNumber>;
}
interface SVGPointList {
[Symbol.iterator](): IterableIterator<DOMPoint>;
[Symbol.iterator](): ArrayIterator<DOMPoint>;
}
interface SVGStringList {
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
}
interface SVGTransformList {
[Symbol.iterator](): IterableIterator<SVGTransform>;
[Symbol.iterator](): ArrayIterator<SVGTransform>;
}
interface SourceBufferList {
[Symbol.iterator](): IterableIterator<SourceBuffer>;
[Symbol.iterator](): ArrayIterator<SourceBuffer>;
}
interface SpeechRecognitionResult {
[Symbol.iterator](): IterableIterator<SpeechRecognitionAlternative>;
[Symbol.iterator](): ArrayIterator<SpeechRecognitionAlternative>;
}
interface SpeechRecognitionResultList {
[Symbol.iterator](): IterableIterator<SpeechRecognitionResult>;
[Symbol.iterator](): ArrayIterator<SpeechRecognitionResult>;
}
interface StylePropertyMapReadOnlyIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): StylePropertyMapReadOnlyIterator<T>;
}
interface StylePropertyMapReadOnly {
[Symbol.iterator](): IterableIterator<[string, Iterable<CSSStyleValue>]>;
entries(): IterableIterator<[string, Iterable<CSSStyleValue>]>;
keys(): IterableIterator<string>;
values(): IterableIterator<Iterable<CSSStyleValue>>;
[Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]>;
entries(): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]>;
keys(): StylePropertyMapReadOnlyIterator<string>;
values(): StylePropertyMapReadOnlyIterator<Iterable<CSSStyleValue>>;
}
interface StyleSheetList {
[Symbol.iterator](): IterableIterator<CSSStyleSheet>;
[Symbol.iterator](): ArrayIterator<CSSStyleSheet>;
}

@@ -343,21 +355,25 @@

interface TextTrackCueList {
[Symbol.iterator](): IterableIterator<TextTrackCue>;
[Symbol.iterator](): ArrayIterator<TextTrackCue>;
}
interface TextTrackList {
[Symbol.iterator](): IterableIterator<TextTrack>;
[Symbol.iterator](): ArrayIterator<TextTrack>;
}
interface TouchList {
[Symbol.iterator](): IterableIterator<Touch>;
[Symbol.iterator](): ArrayIterator<Touch>;
}
interface URLSearchParamsIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): URLSearchParamsIterator<T>;
}
interface URLSearchParams {
[Symbol.iterator](): IterableIterator<[string, string]>;
[Symbol.iterator](): URLSearchParamsIterator<[string, string]>;
/** Returns an array of key, value pairs for every entry in the search params. */
entries(): IterableIterator<[string, string]>;
entries(): URLSearchParamsIterator<[string, string]>;
/** Returns a list of keys in the search params. */
keys(): IterableIterator<string>;
keys(): URLSearchParamsIterator<string>;
/** Returns a list of values in the search params. */
values(): IterableIterator<string>;
values(): URLSearchParamsIterator<string>;
}

@@ -364,0 +380,0 @@

@@ -21,5 +21,5 @@ /*! *****************************************************************************

interface Generator<T = unknown, TReturn = any, TNext = unknown> extends Iterator<T, TReturn, TNext> {
interface Generator<T = unknown, TReturn = any, TNext = any> extends IteratorObject<T, TReturn, TNext> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): IteratorResult<T, TReturn>;
next(...[value]: [] | [TNext]): IteratorResult<T, TReturn>;
return(value: TReturn): IteratorResult<T, TReturn>;

@@ -26,0 +26,0 @@ throw(e: any): IteratorResult<T, TReturn>;

@@ -41,5 +41,5 @@ /*! *****************************************************************************

interface Iterator<T, TReturn = any, TNext = undefined> {
interface Iterator<T, TReturn = any, TNext = any> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): IteratorResult<T, TReturn>;
next(...[value]: [] | [TNext]): IteratorResult<T, TReturn>;
return?(value?: TReturn): IteratorResult<T, TReturn>;

@@ -49,13 +49,33 @@ throw?(e?: any): IteratorResult<T, TReturn>;

interface Iterable<T> {
[Symbol.iterator](): Iterator<T>;
interface Iterable<T, TReturn = any, TNext = any> {
[Symbol.iterator](): Iterator<T, TReturn, TNext>;
}
interface IterableIterator<T> extends Iterator<T> {
[Symbol.iterator](): IterableIterator<T>;
/**
* Describes a user-defined {@link Iterator} that is also iterable.
*/
interface IterableIterator<T, TReturn = any, TNext = any> extends Iterator<T, TReturn, TNext> {
[Symbol.iterator](): IterableIterator<T, TReturn, TNext>;
}
/**
* Describes an {@link Iterator} produced by the runtime that inherits from the intrinsic `Iterator.prototype`.
*/
interface IteratorObject<T, TReturn = unknown, TNext = unknown> extends Iterator<T, TReturn, TNext> {
[Symbol.iterator](): IteratorObject<T, TReturn, TNext>;
}
/**
* Defines the `TReturn` type used for built-in iterators produced by `Array`, `Map`, `Set`, and others.
* This is `undefined` when `strictBuiltInIteratorReturn` is `true`; otherwise, this is `any`.
*/
type BuiltinIteratorReturn = intrinsic;
interface ArrayIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): ArrayIterator<T>;
}
interface Array<T> {
/** Iterator */
[Symbol.iterator](): IterableIterator<T>;
[Symbol.iterator](): ArrayIterator<T>;

@@ -65,3 +85,3 @@ /**

*/
entries(): IterableIterator<[number, T]>;
entries(): ArrayIterator<[number, T]>;

@@ -71,3 +91,3 @@ /**

*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -77,3 +97,3 @@ /**

*/
values(): IterableIterator<T>;
values(): ArrayIterator<T>;
}

@@ -99,3 +119,3 @@

/** Iterator of values in the array. */
[Symbol.iterator](): IterableIterator<T>;
[Symbol.iterator](): ArrayIterator<T>;

@@ -105,3 +125,3 @@ /**

*/
entries(): IterableIterator<[number, T]>;
entries(): ArrayIterator<[number, T]>;

@@ -111,3 +131,3 @@ /**

*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -117,3 +137,3 @@ /**

*/
values(): IterableIterator<T>;
values(): ArrayIterator<T>;
}

@@ -123,8 +143,12 @@

/** Iterator */
[Symbol.iterator](): IterableIterator<any>;
[Symbol.iterator](): ArrayIterator<any>;
}
interface MapIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): MapIterator<T>;
}
interface Map<K, V> {
/** Returns an iterable of entries in the map. */
[Symbol.iterator](): IterableIterator<[K, V]>;
[Symbol.iterator](): MapIterator<[K, V]>;

@@ -134,3 +158,3 @@ /**

*/
entries(): IterableIterator<[K, V]>;
entries(): MapIterator<[K, V]>;

@@ -140,3 +164,3 @@ /**

*/
keys(): IterableIterator<K>;
keys(): MapIterator<K>;

@@ -146,3 +170,3 @@ /**

*/
values(): IterableIterator<V>;
values(): MapIterator<V>;
}

@@ -152,3 +176,3 @@

/** Returns an iterable of entries in the map. */
[Symbol.iterator](): IterableIterator<[K, V]>;
[Symbol.iterator](): MapIterator<[K, V]>;

@@ -158,3 +182,3 @@ /**

*/
entries(): IterableIterator<[K, V]>;
entries(): MapIterator<[K, V]>;

@@ -164,3 +188,3 @@ /**

*/
keys(): IterableIterator<K>;
keys(): MapIterator<K>;

@@ -170,3 +194,3 @@ /**

*/
values(): IterableIterator<V>;
values(): MapIterator<V>;
}

@@ -185,13 +209,17 @@

interface SetIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): SetIterator<T>;
}
interface Set<T> {
/** Iterates over values in the set. */
[Symbol.iterator](): IterableIterator<T>;
[Symbol.iterator](): SetIterator<T>;
/**
* Returns an iterable of [v,v] pairs for every value `v` in the set.
*/
entries(): IterableIterator<[T, T]>;
entries(): SetIterator<[T, T]>;
/**
* Despite its name, returns an iterable of the values in the set.
*/
keys(): IterableIterator<T>;
keys(): SetIterator<T>;

@@ -201,3 +229,3 @@ /**

*/
values(): IterableIterator<T>;
values(): SetIterator<T>;
}

@@ -207,3 +235,3 @@

/** Iterates over values in the set. */
[Symbol.iterator](): IterableIterator<T>;
[Symbol.iterator](): SetIterator<T>;

@@ -213,3 +241,3 @@ /**

*/
entries(): IterableIterator<[T, T]>;
entries(): SetIterator<[T, T]>;

@@ -219,3 +247,3 @@ /**

*/
keys(): IterableIterator<T>;
keys(): SetIterator<T>;

@@ -225,3 +253,3 @@ /**

*/
values(): IterableIterator<T>;
values(): SetIterator<T>;
}

@@ -259,21 +287,25 @@

interface StringIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): StringIterator<T>;
}
interface String {
/** Iterator */
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): StringIterator<string>;
}
interface Int8Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -294,15 +326,15 @@

interface Uint8Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -323,7 +355,7 @@

interface Uint8ClampedArray {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;

@@ -333,3 +365,3 @@ /**

*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -339,3 +371,3 @@ /**

*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -356,7 +388,7 @@

interface Int16Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;

@@ -366,3 +398,3 @@ /**

*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -372,3 +404,3 @@ /**

*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -389,15 +421,15 @@

interface Uint16Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -418,15 +450,15 @@

interface Int32Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -447,15 +479,15 @@

interface Uint32Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -476,15 +508,15 @@

interface Float32Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -505,15 +537,15 @@

interface Float64Array {
[Symbol.iterator](): IterableIterator<number>;
[Symbol.iterator](): ArrayIterator<number>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): IterableIterator<[number, number]>;
entries(): ArrayIterator<[number, number]>;
/**
* Returns an list of keys in the array
*/
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;
/**
* Returns an list of values in the array
*/
values(): IterableIterator<number>;
values(): ArrayIterator<number>;
}

@@ -520,0 +552,0 @@

@@ -21,3 +21,3 @@ /*! *****************************************************************************

/**
* Returns an array of values of the enumerable properties of an object
* Returns an array of values of the enumerable own properties of an object
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.

@@ -28,3 +28,3 @@ */

/**
* Returns an array of values of the enumerable properties of an object
* Returns an array of values of the enumerable own properties of an object
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.

@@ -35,3 +35,3 @@ */

/**
* Returns an array of key/values of the enumerable properties of an object
* Returns an array of key/values of the enumerable own properties of an object
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.

@@ -42,3 +42,3 @@ */

/**
* Returns an array of key/values of the enumerable properties of an object
* Returns an array of key/values of the enumerable own properties of an object
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.

@@ -45,0 +45,0 @@ */

@@ -21,5 +21,5 @@ /*! *****************************************************************************

interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> {
interface AsyncGenerator<T = unknown, TReturn = any, TNext = any> extends AsyncIteratorObject<T, TReturn, TNext> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
return(value: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;

@@ -26,0 +26,0 @@ throw(e: any): Promise<IteratorResult<T, TReturn>>;

@@ -30,5 +30,5 @@ /*! *****************************************************************************

interface AsyncIterator<T, TReturn = any, TNext = undefined> {
interface AsyncIterator<T, TReturn = any, TNext = any> {
// NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places.
next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>;
return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>;

@@ -38,8 +38,18 @@ throw?(e?: any): Promise<IteratorResult<T, TReturn>>;

interface AsyncIterable<T> {
[Symbol.asyncIterator](): AsyncIterator<T>;
interface AsyncIterable<T, TReturn = any, TNext = any> {
[Symbol.asyncIterator](): AsyncIterator<T, TReturn, TNext>;
}
interface AsyncIterableIterator<T> extends AsyncIterator<T> {
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
/**
* Describes a user-defined {@link AsyncIterator} that is also async iterable.
*/
interface AsyncIterableIterator<T, TReturn = any, TNext = any> extends AsyncIterator<T, TReturn, TNext> {
[Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext>;
}
/**
* Describes an {@link AsyncIterator} produced by the runtime that inherits from the intrinsic `AsyncIterator.prototype`.
*/
interface AsyncIteratorObject<T, TReturn = unknown, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> {
[Symbol.asyncIterator](): AsyncIteratorObject<T, TReturn, TNext>;
}

@@ -174,3 +174,3 @@ /*! *****************************************************************************

/** Yields index, value pairs for every entry in the array. */
entries(): IterableIterator<[number, bigint]>;
entries(): ArrayIterator<[number, bigint]>;

@@ -260,3 +260,3 @@ /**

/** Yields each index in the array. */
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -383,5 +383,5 @@ /**

/** Yields each value in the array. */
values(): IterableIterator<bigint>;
values(): ArrayIterator<bigint>;
[Symbol.iterator](): IterableIterator<bigint>;
[Symbol.iterator](): ArrayIterator<bigint>;

@@ -449,3 +449,3 @@ readonly [Symbol.toStringTag]: "BigInt64Array";

/** Yields index, value pairs for every entry in the array. */
entries(): IterableIterator<[number, bigint]>;
entries(): ArrayIterator<[number, bigint]>;

@@ -535,3 +535,3 @@ /**

/** Yields each index in the array. */
keys(): IterableIterator<number>;
keys(): ArrayIterator<number>;

@@ -658,5 +658,5 @@ /**

/** Yields each value in the array. */
values(): IterableIterator<bigint>;
values(): ArrayIterator<bigint>;
[Symbol.iterator](): IterableIterator<bigint>;
[Symbol.iterator](): ArrayIterator<bigint>;

@@ -663,0 +663,0 @@ readonly [Symbol.toStringTag]: "BigUint64Array";

@@ -19,3 +19,3 @@ /*! *****************************************************************************

/// <reference lib="es2015.iterable" />
/// <reference lib="es2020.symbol.wellknown" />

@@ -28,3 +28,3 @@ interface String {

*/
matchAll(regexp: RegExp): IterableIterator<RegExpExecArray>;
matchAll(regexp: RegExp): RegExpStringIterator<RegExpExecArray>;

@@ -31,0 +31,0 @@ /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */

@@ -30,2 +30,6 @@ /*! *****************************************************************************

interface RegExpStringIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): RegExpStringIterator<T>;
}
interface RegExp {

@@ -37,3 +41,3 @@ /**

*/
[Symbol.matchAll](str: string): IterableIterator<RegExpMatchArray>;
[Symbol.matchAll](str: string): RegExpStringIterator<RegExpMatchArray>;
}

@@ -49,2 +49,6 @@ /*! *****************************************************************************

interface SegmentIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): SegmentIterator<T>;
}
interface Segments {

@@ -59,3 +63,3 @@ /**

/** Returns an iterator to iterate over the segments. */
[Symbol.iterator](): IterableIterator<SegmentData>;
[Symbol.iterator](): SegmentIterator<SegmentData>;
}

@@ -62,0 +66,0 @@

@@ -29,1 +29,2 @@ /*! *****************************************************************************

/// <reference lib="esnext.string" />
/// <reference lib="esnext.iterator" />

@@ -20,2 +20,4 @@ /*! *****************************************************************************

/// <reference lib="es2015.symbol" />
/// <reference lib="es2015.iterable" />
/// <reference lib="es2018.asynciterable" />

@@ -187,1 +189,7 @@ interface SymbolConstructor {

declare var AsyncDisposableStack: AsyncDisposableStackConstructor;
interface IteratorObject<T, TReturn, TNext> extends Disposable {
}
interface AsyncIteratorObject<T, TReturn, TNext> extends AsyncDisposable {
}

@@ -23,12 +23,20 @@ /*! *****************************************************************************

interface FileSystemDirectoryHandleAsyncIterator<T> extends AsyncIteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<T>;
}
interface FileSystemDirectoryHandle {
[Symbol.asyncIterator](): AsyncIterableIterator<[string, FileSystemHandle]>;
entries(): AsyncIterableIterator<[string, FileSystemHandle]>;
keys(): AsyncIterableIterator<string>;
values(): AsyncIterableIterator<FileSystemHandle>;
[Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>;
entries(): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>;
keys(): FileSystemDirectoryHandleAsyncIterator<string>;
values(): FileSystemDirectoryHandleAsyncIterator<FileSystemHandle>;
}
interface ReadableStreamAsyncIterator<T> extends AsyncIteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.asyncIterator](): ReadableStreamAsyncIterator<T>;
}
interface ReadableStream<R = any> {
[Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): AsyncIterableIterator<R>;
values(options?: ReadableStreamIteratorOptions): AsyncIterableIterator<R>;
[Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;
values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;
}

@@ -29,20 +29,20 @@ /*! *****************************************************************************

interface CSSNumericArray {
[Symbol.iterator](): IterableIterator<CSSNumericValue>;
entries(): IterableIterator<[number, CSSNumericValue]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSNumericValue>;
[Symbol.iterator](): ArrayIterator<CSSNumericValue>;
entries(): ArrayIterator<[number, CSSNumericValue]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSNumericValue>;
}
interface CSSTransformValue {
[Symbol.iterator](): IterableIterator<CSSTransformComponent>;
entries(): IterableIterator<[number, CSSTransformComponent]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSTransformComponent>;
[Symbol.iterator](): ArrayIterator<CSSTransformComponent>;
entries(): ArrayIterator<[number, CSSTransformComponent]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSTransformComponent>;
}
interface CSSUnparsedValue {
[Symbol.iterator](): IterableIterator<CSSUnparsedSegment>;
entries(): IterableIterator<[number, CSSUnparsedSegment]>;
keys(): IterableIterator<number>;
values(): IterableIterator<CSSUnparsedSegment>;
[Symbol.iterator](): ArrayIterator<CSSUnparsedSegment>;
entries(): ArrayIterator<[number, CSSUnparsedSegment]>;
keys(): ArrayIterator<number>;
values(): ArrayIterator<CSSUnparsedSegment>;
}

@@ -66,7 +66,7 @@

interface DOMStringList {
[Symbol.iterator](): IterableIterator<string>;
[Symbol.iterator](): ArrayIterator<string>;
}
interface FileList {
[Symbol.iterator](): IterableIterator<File>;
[Symbol.iterator](): ArrayIterator<File>;
}

@@ -77,20 +77,28 @@

interface FormDataIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): FormDataIterator<T>;
}
interface FormData {
[Symbol.iterator](): IterableIterator<[string, FormDataEntryValue]>;
[Symbol.iterator](): FormDataIterator<[string, FormDataEntryValue]>;
/** Returns an array of key, value pairs for every entry in the list. */
entries(): IterableIterator<[string, FormDataEntryValue]>;
entries(): FormDataIterator<[string, FormDataEntryValue]>;
/** Returns a list of keys in the list. */
keys(): IterableIterator<string>;
keys(): FormDataIterator<string>;
/** Returns a list of values in the list. */
values(): IterableIterator<FormDataEntryValue>;
values(): FormDataIterator<FormDataEntryValue>;
}
interface HeadersIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): HeadersIterator<T>;
}
interface Headers {
[Symbol.iterator](): IterableIterator<[string, string]>;
[Symbol.iterator](): HeadersIterator<[string, string]>;
/** Returns an iterator allowing to go through all key/value pairs contained in this object. */
entries(): IterableIterator<[string, string]>;
entries(): HeadersIterator<[string, string]>;
/** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */
keys(): IterableIterator<string>;
keys(): HeadersIterator<string>;
/** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */
values(): IterableIterator<string>;
values(): HeadersIterator<string>;
}

@@ -119,15 +127,15 @@

interface MessageEvent<T = any> {
/**
* @deprecated
*
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/initMessageEvent)
*/
/** @deprecated */
initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable<MessagePort>): void;
}
interface StylePropertyMapReadOnlyIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): StylePropertyMapReadOnlyIterator<T>;
}
interface StylePropertyMapReadOnly {
[Symbol.iterator](): IterableIterator<[string, Iterable<CSSStyleValue>]>;
entries(): IterableIterator<[string, Iterable<CSSStyleValue>]>;
keys(): IterableIterator<string>;
values(): IterableIterator<Iterable<CSSStyleValue>>;
[Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]>;
entries(): StylePropertyMapReadOnlyIterator<[string, Iterable<CSSStyleValue>]>;
keys(): StylePropertyMapReadOnlyIterator<string>;
values(): StylePropertyMapReadOnlyIterator<Iterable<CSSStyleValue>>;
}

@@ -150,10 +158,14 @@

interface URLSearchParamsIterator<T> extends IteratorObject<T, BuiltinIteratorReturn, unknown> {
[Symbol.iterator](): URLSearchParamsIterator<T>;
}
interface URLSearchParams {
[Symbol.iterator](): IterableIterator<[string, string]>;
[Symbol.iterator](): URLSearchParamsIterator<[string, string]>;
/** Returns an array of key, value pairs for every entry in the search params. */
entries(): IterableIterator<[string, string]>;
entries(): URLSearchParamsIterator<[string, string]>;
/** Returns a list of keys in the search params. */
keys(): IterableIterator<string>;
keys(): URLSearchParamsIterator<string>;
/** Returns a list of values in the search params. */
values(): IterableIterator<string>;
values(): URLSearchParamsIterator<string>;
}

@@ -160,0 +172,0 @@

@@ -18,5 +18,7 @@ /*! *****************************************************************************

"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;

@@ -32,3 +34,14 @@ var __copyProps = (to, from, except, desc) => {

var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
// src/tsserver/server.ts
var import_os2 = __toESM(require("os"));
// src/typescript/typescript.ts

@@ -38,2 +51,9 @@ var typescript_exports = {};

// src/tsserver/nodeServer.ts
var import_child_process = __toESM(require("child_process"));
var import_fs = __toESM(require("fs"));
var import_net = __toESM(require("net"));
var import_os = __toESM(require("os"));
var import_readline = __toESM(require("readline"));
// src/tsserver/common.ts

@@ -113,4 +133,2 @@ function getLogLevel(level) {

const sys4 = typescript_exports.Debug.checkDefined(typescript_exports.sys);
const childProcess = require("child_process");
const fs = require("fs");
class Logger {

@@ -127,4 +145,4 @@ constructor(logFilename, traceToConsole, level) {

try {
this.fd = fs.openSync(this.logFilename, "w");
} catch (_) {
this.fd = import_fs.default.openSync(this.logFilename, "w");
} catch {
}

@@ -138,3 +156,3 @@ }

if (this.fd >= 0) {
fs.close(this.fd, typescript_exports.noop);
import_fs.default.close(this.fd, typescript_exports.noop);
}

@@ -168,14 +186,2 @@ }

msg(s, type = typescript_exports.server.Msg.Err) {
var _a, _b, _c;
switch (type) {
case typescript_exports.server.Msg.Info:
(_a = typescript_exports.perfLogger) == null ? void 0 : _a.logInfoEvent(s);
break;
case typescript_exports.server.Msg.Perf:
(_b = typescript_exports.perfLogger) == null ? void 0 : _b.logPerfEvent(s);
break;
default:
(_c = typescript_exports.perfLogger) == null ? void 0 : _c.logErrEvent(s);
break;
}
if (!this.canWrite()) return;

@@ -199,3 +205,3 @@ s = `[${typescript_exports.server.nowString()}] ${s}

const buf = Buffer.from(s);
fs.writeSync(
import_fs.default.writeSync(
this.fd,

@@ -251,3 +257,3 @@ buf,

}
childProcess.execFileSync(process.execPath, args, { stdio: "ignore", env: { ELECTRON_RUN_AS_NODE: "1" } });
import_child_process.default.execFileSync(process.execPath, args, { stdio: "ignore", env: { ELECTRON_RUN_AS_NODE: "1" } });
status = true;

@@ -291,5 +297,5 @@ if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) {

try {
const factory = require("./cancellationToken");
const factory = require("./cancellationToken.js");
cancellationToken = factory(sys4.args);
} catch (e) {
} catch {
cancellationToken = typescript_exports.server.nullCancellationToken;

@@ -374,7 +380,3 @@ }

function startNodeSession(options, logger, cancellationToken) {
const childProcess = require("child_process");
const os = require("os");
const net = require("net");
const readline = require("readline");
const rl = readline.createInterface({
const rl = import_readline.default.createInterface({
input: process.stdin,

@@ -432,3 +434,3 @@ output: process.stdout,

const typingsInstaller = (0, typescript_exports.combinePaths)((0, typescript_exports.getDirectoryPath)(typescript_exports.sys.getExecutingFilePath()), "typingsInstaller.js");
this.installer = childProcess.fork(typingsInstaller, args, { execArgv });
this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv });
this.installer.on("message", (m) => this.handleMessage(m));

@@ -469,3 +471,3 @@ this.host.setImmediate(() => this.event({ pid: this.installer.pid }, "typingsInstallerPid"));

if (this.canUseEvents && this.eventPort) {
const s = net.connect({ port: this.eventPort }, () => {
const s = import_net.default.connect({ port: this.eventPort }, () => {
this.eventSocket = s;

@@ -565,3 +567,3 @@ if (this.socketEventQueue) {

case "win32": {
const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || os.homedir && os.homedir() || process.env.USERPROFILE || process.env.HOMEDRIVE && process.env.HOMEPATH && (0, typescript_exports.normalizeSlashes)(process.env.HOMEDRIVE + process.env.HOMEPATH) || os.tmpdir();
const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || import_os.default.homedir && import_os.default.homedir() || process.env.USERPROFILE || process.env.HOMEDRIVE && process.env.HOMEPATH && (0, typescript_exports.normalizeSlashes)(process.env.HOMEDRIVE + process.env.HOMEPATH) || import_os.default.tmpdir();
return (0, typescript_exports.combinePaths)((0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(basePath), "Microsoft/TypeScript"), typescript_exports.versionMajorMinor);

@@ -587,3 +589,3 @@ }

const usersDir = platformIsDarwin ? "Users" : "home";
const homePath = os.homedir && os.homedir() || process.env.HOME || (process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}` || os.tmpdir();
const homePath = import_os.default.homedir && import_os.default.homedir() || process.env.HOME || (process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}` || import_os.default.tmpdir();
const cacheFolder = platformIsDarwin ? "Library/Caches" : ".cache";

@@ -635,3 +637,3 @@ return (0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(homePath), cacheFolder);

typescript_exports.setStackTraceLimit();
start(initializeNodeSystem(), require("os").platform());
start(initializeNodeSystem(), import_os2.default.platform());
//# sourceMappingURL=tsserver.js.map

@@ -53,2 +53,3 @@ /*! *****************************************************************************

module.exports = __toCommonJS(nodeTypingsInstaller_exports);
var import_child_process = require("child_process");
var fs = __toESM(require("fs"));

@@ -72,3 +73,3 @@ var path = __toESM(require("path"));

fs.appendFileSync(this.logFile, `[${typescript_exports.server.nowString()}] ${text}${typescript_exports.sys.newLine}`);
} catch (e) {
} catch {
this.logFile = void 0;

@@ -132,3 +133,2 @@ }

}
({ execSync: this.nodeExecSync } = require("child_process"));
this.ensurePackageDirectoryExists(globalTypingsCacheLocation2);

@@ -188,3 +188,3 @@ try {

try {
const stdout = this.nodeExecSync(command, { ...options, encoding: "utf-8" });
const stdout = (0, import_child_process.execFileSync)(command, { ...options, encoding: "utf-8" });
if (this.log.isEnabled()) {

@@ -191,0 +191,0 @@ this.log.writeLine(` Succeeded. stdout:${indent(typescript_exports.sys.newLine, stdout)}`);

@@ -5,3 +5,3 @@ {

"homepage": "https://www.typescriptlang.org/",
"version": "5.5.4",
"version": "5.6.2",
"license": "Apache-2.0",

@@ -17,7 +17,7 @@ "description": "TypeScript is a language for application scale JavaScript development",

"bugs": {
"url": "https://github.com/Microsoft/TypeScript/issues"
"url": "https://github.com/microsoft/TypeScript/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/Microsoft/TypeScript.git"
"url": "https://github.com/microsoft/TypeScript.git"
},

@@ -44,41 +44,46 @@ "main": "./lib/typescript.js",

"devDependencies": {
"@dprint/formatter": "^0.3.0",
"@dprint/typescript": "0.91.0",
"@dprint/formatter": "^0.4.1",
"@dprint/typescript": "0.91.6",
"@esfx/canceltoken": "^1.0.0",
"@octokit/rest": "^20.1.1",
"@types/chai": "^4.3.16",
"@types/microsoft__typescript-etw": "^0.1.3",
"@eslint/js": "^9.9.0",
"@octokit/rest": "^21.0.1",
"@types/chai": "^4.3.17",
"@types/diff": "^5.2.1",
"@types/minimist": "^1.2.5",
"@types/mocha": "^10.0.6",
"@types/mocha": "^10.0.7",
"@types/ms": "^0.7.34",
"@types/node": "latest",
"@types/source-map-support": "^0.5.10",
"@types/which": "^3.0.3",
"@typescript-eslint/eslint-plugin": "^7.11.0",
"@typescript-eslint/parser": "^7.11.0",
"@typescript-eslint/utils": "^7.11.0",
"azure-devops-node-api": "^13.0.0",
"c8": "^9.1.0",
"chai": "^4.4.1",
"@types/which": "^3.0.4",
"@typescript-eslint/rule-tester": "^8.1.0",
"@typescript-eslint/type-utils": "^8.1.0",
"@typescript-eslint/utils": "^8.1.0",
"azure-devops-node-api": "^14.0.2",
"c8": "^10.1.2",
"chai": "^4.5.0",
"chalk": "^4.1.2",
"chokidar": "^3.6.0",
"diff": "^5.2.0",
"dprint": "^0.46.1",
"esbuild": "^0.21.4",
"eslint": "^8.57.0",
"eslint-formatter-autolinkable-stylish": "^1.3.0",
"eslint-plugin-local": "^4.2.2",
"fast-xml-parser": "^4.4.0",
"glob": "^10.4.1",
"hereby": "^1.8.9",
"jsonc-parser": "^3.2.1",
"dprint": "^0.47.2",
"esbuild": "^0.23.0",
"eslint": "^9.9.0",
"eslint-formatter-autolinkable-stylish": "^1.4.0",
"eslint-plugin-regexp": "^2.6.0",
"fast-xml-parser": "^4.4.1",
"glob": "^10.4.5",
"globals": "^15.9.0",
"hereby": "^1.9.0",
"jsonc-parser": "^3.3.1",
"knip": "^5.27.2",
"minimist": "^1.2.8",
"mocha": "^10.4.0",
"mocha": "^10.7.3",
"mocha-fivemat-progress-reporter": "^0.1.0",
"monocart-coverage-reports": "^2.10.2",
"ms": "^2.1.3",
"node-fetch": "^3.3.2",
"playwright": "^1.44.1",
"playwright": "^1.46.0",
"source-map-support": "^0.5.21",
"tslib": "^2.6.2",
"typescript": "^5.4.5",
"tslib": "^2.6.3",
"typescript": "^5.5.4",
"typescript-eslint": "^8.1.0",
"which": "^3.0.1"

@@ -99,2 +104,3 @@ },

"lint": "hereby lint",
"knip": "hereby knip",
"format": "dprint fmt",

@@ -109,3 +115,2 @@ "setup-hooks": "node scripts/link-hooks.mjs"

"buffer": false,
"@microsoft/typescript-etw": false,
"source-map-support": false,

@@ -120,3 +125,3 @@ "inspector": false,

},
"gitHead": "c8a7d589e647e19c94150d9892909f3aa93e48eb"
"gitHead": "a7e3374f13327483fbe94e32806d65785b0b6cda"
}

@@ -15,3 +15,3 @@ {

"dependencies": {
"@zip.js/zip.js": "2.7.51",
"@zip.js/zip.js": "2.7.52",
"dexie": "4.0.8"

@@ -22,3 +22,3 @@ },

"ts-loader": "^9.5.1",
"typescript": "^5.5.4",
"typescript": "^5.6.2",
"webpack": "^5.94.0",

@@ -25,0 +25,0 @@ "webpack-cli": "^5.1.4",

@@ -52,3 +52,3 @@ {

"http-server": "^14.1.1",
"nodemon": "^2.0.22",
"nodemon": "^3.1.4",
"npm-run-all": "^4.1.5",

@@ -55,0 +55,0 @@ "ts-node": "^10.9.1",

@@ -231,3 +231,3 @@ import { type Locale } from "./core.js";

metadata: { locale: Locale };
isMarkdown: true;
isMarkdown: boolean;
fileInfo: {

@@ -234,0 +234,0 @@ path: string;

{
"name": "@mdn/yari",
"version": "2.62.0",
"version": "2.63.0",
"repository": "https://github.com/mdn/yari",

@@ -68,3 +68,3 @@ "license": "MPL-2.0",

"@caporal/core": "^2.0.7",
"@codemirror/lang-css": "^6.2.1",
"@codemirror/lang-css": "^6.3.0",
"@codemirror/lang-html": "^6.4.9",

@@ -76,13 +76,13 @@ "@codemirror/lang-javascript": "^6.2.2",

"@mdn/bcd-utils-api": "^0.0.7",
"@mdn/browser-compat-data": "^5.5.49",
"@mdn/browser-compat-data": "^5.5.51",
"@mozilla/glean": "5.0.3",
"@sentry/node": "^8.26.0",
"@stripe/stripe-js": "^4.3.0",
"@sentry/node": "^8.29.0",
"@stripe/stripe-js": "^4.4.0",
"@use-it/interval": "^1.0.0",
"@vscode/ripgrep": "^1.15.9",
"@webref/css": "^6.14.2",
"@webref/css": "^6.15.1",
"accept-language-parser": "^1.5.0",
"async": "^3.2.6",
"chalk": "^5.3.0",
"cheerio": "^1.0.0-rc.12",
"cheerio": "1.0.0-rc.12",
"cli-progress": "^3.12.0",

@@ -99,6 +99,6 @@ "codemirror": "^6.0.1",

"ejs": "^3.1.10",
"express": "^4.19.2",
"express": "^4.20.0",
"fdir": "^6.3.0",
"feed": "^4.2.2",
"file-type": "^19.4.1",
"file-type": "^19.5.0",
"front-matter": "^4.0.2",

@@ -118,3 +118,3 @@ "fs-extra": "^11.2.0",

"js-yaml": "^4.1.0",
"loglevel": "^1.9.1",
"loglevel": "^1.9.2",
"lru-cache": "^10.4.3",

@@ -124,6 +124,6 @@ "md5-file": "^5.0.0",

"mdast-util-phrasing": "^4.1.0",
"mdn-data": "^2.9.0",
"mdn-data": "^2.11.0",
"open": "^10.1.0",
"open-editor": "^5.0.0",
"openai": "^4.56.0",
"openai": "^4.58.2",
"pg": "^8.12.0",

@@ -147,3 +147,3 @@ "pgvector": "^0.2.0",

"sanitize-filename": "^1.6.3",
"send": "^0.18.0",
"send": "^0.19.0",
"source-map-support": "^0.5.21",

@@ -156,3 +156,3 @@ "sse.js": "^2.5.0",

"web-features": "^1.2.0",
"web-specs": "^3.17.0"
"web-specs": "^3.21.0"
},

@@ -166,6 +166,6 @@ "devDependencies": {

"@mdn/minimalist": "^2.0.4",
"@playwright/test": "^1.46.1",
"@playwright/test": "^1.47.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
"@svgr/webpack": "^8.1.0",
"@swc/core": "^1.7.18",
"@swc/core": "^1.7.24",
"@testing-library/react": "^15.0.7",

@@ -176,4 +176,5 @@ "@types/async": "^3.2.24",

"@types/jest": "^29.5.12",
"@types/js-yaml": "^4.0.9",
"@types/mdast": "^4.0.4",
"@types/node": "^18.19.46",
"@types/node": "^18.19.47",
"@types/react": "^18.3.4",

@@ -194,3 +195,3 @@ "@types/react-dom": "^18.3.0",

"css-minimizer-webpack-plugin": "^7.0.0",
"diff": "^5.2.0",
"diff": "^7.0.0",
"downshift": "^7.6.1",

@@ -201,7 +202,7 @@ "eslint": "^8.57.0",

"eslint-plugin-flowtype": "^8.0.3",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^28.8.0",
"eslint-plugin-jsx-a11y": "^6.9.0",
"eslint-plugin-import": "^2.30.0",
"eslint-plugin-jest": "^28.8.3",
"eslint-plugin-jsx-a11y": "^6.10.0",
"eslint-plugin-n": "^17.10.2",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-react": "^7.35.2",
"eslint-plugin-react-hooks": "^4.6.2",

@@ -215,3 +216,3 @@ "eslint-plugin-unicorn": "^55.0.0",

"history": "^5.2.0",
"html-validate": "^8.21.0",
"html-validate": "^8.22.0",
"html-webpack-plugin": "^5.6.0",

@@ -226,3 +227,3 @@ "husky": "^9.1.5",

"jest-watch-typeahead": "^2.2.2",
"jsdom": "^24.1.1",
"jsdom": "^25.0.0",
"lint-staged": "^13.2.3",

@@ -233,7 +234,7 @@ "mdast-util-to-hast": "^13.2.0",

"peggy": "^4.0.3",
"postcss": "^8.4.41",
"postcss": "^8.4.45",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-loader": "^8.1.1",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^9.6.0",
"postcss-normalize": "^13.0.0",
"postcss-preset-env": "^10.0.3",
"prettier": "^3.3.3",

@@ -248,3 +249,3 @@ "prettier-plugin-packagejson": "^2.5.2",

"react-router": "^6.17.0",
"react-router-dom": "^6.26.1",
"react-router-dom": "^6.26.2",
"remark-prettier": "^2.0.0",

@@ -254,4 +255,4 @@ "resolve": "^1.22.8",

"rough-notation": "^0.5.1",
"sass": "^1.77.6",
"sass-loader": "^15.0.0",
"sass": "^1.78.0",
"sass-loader": "^16.0.1",
"source-map-explorer": "^2.5.3",

@@ -273,7 +274,7 @@ "source-map-loader": "^5.0.0",

"ts-node": "^10.9.2",
"typescript": "^5.5.4",
"typescript-eslint": "^8.3.0",
"typescript": "^5.6.2",
"typescript-eslint": "^8.5.0",
"webpack": "^5.94.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^5.0.4",
"webpack-dev-server": "^5.1.0",
"webpack-manifest-plugin": "^5.0.0",

@@ -280,0 +281,0 @@ "webpack-node-externals": "^3.0.0"

@@ -90,3 +90,3 @@ /*!

/**
* @remix-run/router v1.19.1
* @remix-run/router v1.19.2
*

@@ -111,3 +111,3 @@ * Copyright (c) Remix Software Inc.

/**
* React Router DOM v6.26.1
* React Router DOM v6.26.2
*

@@ -123,3 +123,3 @@ * Copyright (c) Remix Software Inc.

/**
* React Router v6.26.1
* React Router v6.26.2
*

@@ -126,0 +126,0 @@ * Copyright (c) Remix Software Inc.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc