diff --git "a/src/backend/gradio_awsbr_mmchatbot/templates/component/index.js" "b/src/backend/gradio_awsbr_mmchatbot/templates/component/index.js"
new file mode 100644--- /dev/null
+++ "b/src/backend/gradio_awsbr_mmchatbot/templates/component/index.js"
@@ -0,0 +1,19464 @@
+var n1 = Object.defineProperty;
+var r1 = (a, r, s) => r in a ? n1(a, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : a[r] = s;
+var Ue = (a, r, s) => (r1(a, typeof r != "symbol" ? r + "" : r, s), s), s1 = (a, r, s) => {
+  if (!r.has(a))
+    throw TypeError("Cannot " + s);
+};
+var cs = (a, r, s) => {
+  if (r.has(a))
+    throw TypeError("Cannot add the same private member more than once");
+  r instanceof WeakSet ? r.add(a) : r.set(a, s);
+};
+var rr = (a, r, s) => (s1(a, r, "access private method"), s);
+const i1 = [
+  { color: "red", primary: 600, secondary: 100 },
+  { color: "green", primary: 600, secondary: 100 },
+  { color: "blue", primary: 600, secondary: 100 },
+  { color: "yellow", primary: 500, secondary: 100 },
+  { color: "purple", primary: 600, secondary: 100 },
+  { color: "teal", primary: 600, secondary: 100 },
+  { color: "orange", primary: 600, secondary: 100 },
+  { color: "cyan", primary: 600, secondary: 100 },
+  { color: "lime", primary: 500, secondary: 100 },
+  { color: "pink", primary: 600, secondary: 100 }
+], fl = {
+  inherit: "inherit",
+  current: "currentColor",
+  transparent: "transparent",
+  black: "#000",
+  white: "#fff",
+  slate: {
+    50: "#f8fafc",
+    100: "#f1f5f9",
+    200: "#e2e8f0",
+    300: "#cbd5e1",
+    400: "#94a3b8",
+    500: "#64748b",
+    600: "#475569",
+    700: "#334155",
+    800: "#1e293b",
+    900: "#0f172a",
+    950: "#020617"
+  },
+  gray: {
+    50: "#f9fafb",
+    100: "#f3f4f6",
+    200: "#e5e7eb",
+    300: "#d1d5db",
+    400: "#9ca3af",
+    500: "#6b7280",
+    600: "#4b5563",
+    700: "#374151",
+    800: "#1f2937",
+    900: "#111827",
+    950: "#030712"
+  },
+  zinc: {
+    50: "#fafafa",
+    100: "#f4f4f5",
+    200: "#e4e4e7",
+    300: "#d4d4d8",
+    400: "#a1a1aa",
+    500: "#71717a",
+    600: "#52525b",
+    700: "#3f3f46",
+    800: "#27272a",
+    900: "#18181b",
+    950: "#09090b"
+  },
+  neutral: {
+    50: "#fafafa",
+    100: "#f5f5f5",
+    200: "#e5e5e5",
+    300: "#d4d4d4",
+    400: "#a3a3a3",
+    500: "#737373",
+    600: "#525252",
+    700: "#404040",
+    800: "#262626",
+    900: "#171717",
+    950: "#0a0a0a"
+  },
+  stone: {
+    50: "#fafaf9",
+    100: "#f5f5f4",
+    200: "#e7e5e4",
+    300: "#d6d3d1",
+    400: "#a8a29e",
+    500: "#78716c",
+    600: "#57534e",
+    700: "#44403c",
+    800: "#292524",
+    900: "#1c1917",
+    950: "#0c0a09"
+  },
+  red: {
+    50: "#fef2f2",
+    100: "#fee2e2",
+    200: "#fecaca",
+    300: "#fca5a5",
+    400: "#f87171",
+    500: "#ef4444",
+    600: "#dc2626",
+    700: "#b91c1c",
+    800: "#991b1b",
+    900: "#7f1d1d",
+    950: "#450a0a"
+  },
+  orange: {
+    50: "#fff7ed",
+    100: "#ffedd5",
+    200: "#fed7aa",
+    300: "#fdba74",
+    400: "#fb923c",
+    500: "#f97316",
+    600: "#ea580c",
+    700: "#c2410c",
+    800: "#9a3412",
+    900: "#7c2d12",
+    950: "#431407"
+  },
+  amber: {
+    50: "#fffbeb",
+    100: "#fef3c7",
+    200: "#fde68a",
+    300: "#fcd34d",
+    400: "#fbbf24",
+    500: "#f59e0b",
+    600: "#d97706",
+    700: "#b45309",
+    800: "#92400e",
+    900: "#78350f",
+    950: "#451a03"
+  },
+  yellow: {
+    50: "#fefce8",
+    100: "#fef9c3",
+    200: "#fef08a",
+    300: "#fde047",
+    400: "#facc15",
+    500: "#eab308",
+    600: "#ca8a04",
+    700: "#a16207",
+    800: "#854d0e",
+    900: "#713f12",
+    950: "#422006"
+  },
+  lime: {
+    50: "#f7fee7",
+    100: "#ecfccb",
+    200: "#d9f99d",
+    300: "#bef264",
+    400: "#a3e635",
+    500: "#84cc16",
+    600: "#65a30d",
+    700: "#4d7c0f",
+    800: "#3f6212",
+    900: "#365314",
+    950: "#1a2e05"
+  },
+  green: {
+    50: "#f0fdf4",
+    100: "#dcfce7",
+    200: "#bbf7d0",
+    300: "#86efac",
+    400: "#4ade80",
+    500: "#22c55e",
+    600: "#16a34a",
+    700: "#15803d",
+    800: "#166534",
+    900: "#14532d",
+    950: "#052e16"
+  },
+  emerald: {
+    50: "#ecfdf5",
+    100: "#d1fae5",
+    200: "#a7f3d0",
+    300: "#6ee7b7",
+    400: "#34d399",
+    500: "#10b981",
+    600: "#059669",
+    700: "#047857",
+    800: "#065f46",
+    900: "#064e3b",
+    950: "#022c22"
+  },
+  teal: {
+    50: "#f0fdfa",
+    100: "#ccfbf1",
+    200: "#99f6e4",
+    300: "#5eead4",
+    400: "#2dd4bf",
+    500: "#14b8a6",
+    600: "#0d9488",
+    700: "#0f766e",
+    800: "#115e59",
+    900: "#134e4a",
+    950: "#042f2e"
+  },
+  cyan: {
+    50: "#ecfeff",
+    100: "#cffafe",
+    200: "#a5f3fc",
+    300: "#67e8f9",
+    400: "#22d3ee",
+    500: "#06b6d4",
+    600: "#0891b2",
+    700: "#0e7490",
+    800: "#155e75",
+    900: "#164e63",
+    950: "#083344"
+  },
+  sky: {
+    50: "#f0f9ff",
+    100: "#e0f2fe",
+    200: "#bae6fd",
+    300: "#7dd3fc",
+    400: "#38bdf8",
+    500: "#0ea5e9",
+    600: "#0284c7",
+    700: "#0369a1",
+    800: "#075985",
+    900: "#0c4a6e",
+    950: "#082f49"
+  },
+  blue: {
+    50: "#eff6ff",
+    100: "#dbeafe",
+    200: "#bfdbfe",
+    300: "#93c5fd",
+    400: "#60a5fa",
+    500: "#3b82f6",
+    600: "#2563eb",
+    700: "#1d4ed8",
+    800: "#1e40af",
+    900: "#1e3a8a",
+    950: "#172554"
+  },
+  indigo: {
+    50: "#eef2ff",
+    100: "#e0e7ff",
+    200: "#c7d2fe",
+    300: "#a5b4fc",
+    400: "#818cf8",
+    500: "#6366f1",
+    600: "#4f46e5",
+    700: "#4338ca",
+    800: "#3730a3",
+    900: "#312e81",
+    950: "#1e1b4b"
+  },
+  violet: {
+    50: "#f5f3ff",
+    100: "#ede9fe",
+    200: "#ddd6fe",
+    300: "#c4b5fd",
+    400: "#a78bfa",
+    500: "#8b5cf6",
+    600: "#7c3aed",
+    700: "#6d28d9",
+    800: "#5b21b6",
+    900: "#4c1d95",
+    950: "#2e1065"
+  },
+  purple: {
+    50: "#faf5ff",
+    100: "#f3e8ff",
+    200: "#e9d5ff",
+    300: "#d8b4fe",
+    400: "#c084fc",
+    500: "#a855f7",
+    600: "#9333ea",
+    700: "#7e22ce",
+    800: "#6b21a8",
+    900: "#581c87",
+    950: "#3b0764"
+  },
+  fuchsia: {
+    50: "#fdf4ff",
+    100: "#fae8ff",
+    200: "#f5d0fe",
+    300: "#f0abfc",
+    400: "#e879f9",
+    500: "#d946ef",
+    600: "#c026d3",
+    700: "#a21caf",
+    800: "#86198f",
+    900: "#701a75",
+    950: "#4a044e"
+  },
+  pink: {
+    50: "#fdf2f8",
+    100: "#fce7f3",
+    200: "#fbcfe8",
+    300: "#f9a8d4",
+    400: "#f472b6",
+    500: "#ec4899",
+    600: "#db2777",
+    700: "#be185d",
+    800: "#9d174d",
+    900: "#831843",
+    950: "#500724"
+  },
+  rose: {
+    50: "#fff1f2",
+    100: "#ffe4e6",
+    200: "#fecdd3",
+    300: "#fda4af",
+    400: "#fb7185",
+    500: "#f43f5e",
+    600: "#e11d48",
+    700: "#be123c",
+    800: "#9f1239",
+    900: "#881337",
+    950: "#4c0519"
+  }
+};
+i1.reduce(
+  (a, { color: r, primary: s, secondary: i }) => ({
+    ...a,
+    [r]: {
+      primary: fl[r][s],
+      secondary: fl[r][i]
+    }
+  }),
+  {}
+);
+function lo(a) {
+  let r, s = a[0], i = 1;
+  for (; i < a.length; ) {
+    const o = a[i], u = a[i + 1];
+    if (i += 2, (o === "optionalAccess" || o === "optionalCall") && s == null)
+      return;
+    o === "access" || o === "optionalAccess" ? (r = s, s = u(s)) : (o === "call" || o === "optionalCall") && (s = u((...f) => s.call(r, ...f)), r = void 0);
+  }
+  return s;
+}
+class gr extends Error {
+  constructor(r) {
+    super(r), this.name = "ShareError";
+  }
+}
+async function dl(a, r) {
+  if (window.__gradio_space__ == null)
+    throw new gr("Must be on Spaces to share.");
+  let s, i, o;
+  if (r === "url") {
+    const g = await fetch(a);
+    s = await g.blob(), i = g.headers.get("content-type") || "", o = g.headers.get("content-disposition") || "";
+  } else
+    s = l1(a), i = a.split(";")[0].split(":")[1], o = "file" + i.split("/")[1];
+  const u = new File([s], o, { type: i }), f = await fetch("https://huggingface.co/uploads", {
+    method: "POST",
+    body: u,
+    headers: {
+      "Content-Type": u.type,
+      "X-Requested-With": "XMLHttpRequest"
+    }
+  });
+  if (!f.ok) {
+    if (lo([f, "access", (g) => g.headers, "access", (g) => g.get, "call", (g) => g("content-type"), "optionalAccess", (g) => g.includes, "call", (g) => g("application/json")])) {
+      const g = await f.json();
+      throw new gr(`Upload failed: ${g.error}`);
+    }
+    throw new gr("Upload failed.");
+  }
+  return await f.text();
+}
+function l1(a) {
+  for (var r = a.split(","), s = r[0].match(/:(.*?);/)[1], i = atob(r[1]), o = i.length, u = new Uint8Array(o); o--; )
+    u[o] = i.charCodeAt(o);
+  return new Blob([u], { type: s });
+}
+function a1(a) {
+  a.addEventListener("click", r);
+  async function r(s) {
+    const i = s.composedPath(), [o] = i.filter(
+      (u) => lo([u, "optionalAccess", (f) => f.tagName]) === "BUTTON" && u.classList.contains("copy_code_button")
+    );
+    if (o) {
+      let u = function(y) {
+        y.style.opacity = "1", setTimeout(() => {
+          y.style.opacity = "0";
+        }, 2e3);
+      };
+      s.stopImmediatePropagation();
+      const f = o.parentElement.innerText.trim(), p = Array.from(
+        o.children
+      )[1];
+      await o1(f) && u(p);
+    }
+  }
+  return {
+    destroy() {
+      a.removeEventListener("click", r);
+    }
+  };
+}
+async function o1(a) {
+  let r = !1;
+  if ("clipboard" in navigator)
+    await navigator.clipboard.writeText(a), r = !0;
+  else {
+    const s = document.createElement("textarea");
+    s.value = a, s.style.position = "absolute", s.style.left = "-999999px", document.body.prepend(s), s.select();
+    try {
+      document.execCommand("copy"), r = !0;
+    } catch (i) {
+      console.error(i), r = !1;
+    } finally {
+      s.remove();
+    }
+  }
+  return r;
+}
+function sr(a) {
+  let r, s = a[0], i = 1;
+  for (; i < a.length; ) {
+    const o = a[i], u = a[i + 1];
+    if (i += 2, (o === "optionalAccess" || o === "optionalCall") && s == null)
+      return;
+    o === "access" || o === "optionalAccess" ? (r = s, s = u(s)) : (o === "call" || o === "optionalCall") && (s = u((...f) => s.call(r, ...f)), r = void 0);
+  }
+  return s;
+}
+const u1 = async (a) => (await Promise.all(
+  a.map(async (s) => await Promise.all(
+    s.map(async (i, o) => {
+      if (i === null)
+        return "";
+      let u = o === 0 ? "😃" : "🤖", f = "";
+      if (typeof i == "string") {
+        const p = {
+          audio: /<audio.*?src="(\/file=.*?)"/g,
+          video: /<video.*?src="(\/file=.*?)"/g,
+          image: /<img.*?src="(\/file=.*?)".*?\/>|!\[.*?\]\((\/file=.*?)\)/g
+        };
+        f = i;
+        for (let [g, y] of Object.entries(p)) {
+          let D;
+          for (; (D = y.exec(i)) !== null; ) {
+            const T = D[1] || D[2], P = await dl(T, "url");
+            f = f.replace(T, P);
+          }
+        }
+      } else {
+        if (!sr([i, "optionalAccess", (g) => g.url]))
+          return "";
+        const p = await dl(i.url, "url");
+        sr([i, "access", (g) => g.mime_type, "optionalAccess", (g) => g.includes, "call", (g) => g("audio")]) ? f = `<audio controls src="${p}"></audio>` : sr([i, "access", (g) => g.mime_type, "optionalAccess", (g) => g.includes, "call", (g) => g("video")]) ? f = p : sr([i, "access", (g) => g.mime_type, "optionalAccess", (g) => g.includes, "call", (g) => g("image")]) && (f = `<img src="${p}" />`);
+      }
+      return `${u}: ${f}`;
+    })
+  ))
+)).map(
+  (s) => s.join(
+    s[0] !== "" && s[1] !== "" ? `
+` : ""
+  )
+).join(`
+`);
+var ml = Object.prototype.hasOwnProperty;
+function Ms(a, r) {
+  var s, i;
+  if (a === r)
+    return !0;
+  if (a && r && (s = a.constructor) === r.constructor) {
+    if (s === Date)
+      return a.getTime() === r.getTime();
+    if (s === RegExp)
+      return a.toString() === r.toString();
+    if (s === Array) {
+      if ((i = a.length) === r.length)
+        for (; i-- && Ms(a[i], r[i]); )
+          ;
+      return i === -1;
+    }
+    if (!s || typeof a == "object") {
+      i = 0;
+      for (s in a)
+        if (ml.call(a, s) && ++i && !ml.call(r, s) || !(s in r) || !Ms(a[s], r[s]))
+          return !1;
+      return Object.keys(r).length === i;
+    }
+  }
+  return a !== a && r !== r;
+}
+const {
+  SvelteComponent: c1,
+  assign: h1,
+  create_slot: f1,
+  detach: d1,
+  element: m1,
+  get_all_dirty_from_scope: p1,
+  get_slot_changes: g1,
+  get_spread_update: b1,
+  init: w1,
+  insert: y1,
+  safe_not_equal: _1,
+  set_dynamic_element_data: pl,
+  set_style: wt,
+  toggle_class: F0,
+  transition_in: ao,
+  transition_out: oo,
+  update_slot_base: k1
+} = window.__gradio__svelte__internal;
+function x1(a) {
+  let r, s, i;
+  const o = (
+    /*#slots*/
+    a[18].default
+  ), u = f1(
+    o,
+    a,
+    /*$$scope*/
+    a[17],
+    null
+  );
+  let f = [
+    { "data-testid": (
+      /*test_id*/
+      a[7]
+    ) },
+    { id: (
+      /*elem_id*/
+      a[2]
+    ) },
+    {
+      class: s = "block " + /*elem_classes*/
+      a[3].join(" ") + " svelte-1t38q2d"
+    }
+  ], p = {};
+  for (let g = 0; g < f.length; g += 1)
+    p = h1(p, f[g]);
+  return {
+    c() {
+      r = m1(
+        /*tag*/
+        a[14]
+      ), u && u.c(), pl(
+        /*tag*/
+        a[14]
+      )(r, p), F0(
+        r,
+        "hidden",
+        /*visible*/
+        a[10] === !1
+      ), F0(
+        r,
+        "padded",
+        /*padding*/
+        a[6]
+      ), F0(
+        r,
+        "border_focus",
+        /*border_mode*/
+        a[5] === "focus"
+      ), F0(r, "hide-container", !/*explicit_call*/
+      a[8] && !/*container*/
+      a[9]), wt(
+        r,
+        "height",
+        /*get_dimension*/
+        a[15](
+          /*height*/
+          a[0]
+        )
+      ), wt(r, "width", typeof /*width*/
+      a[1] == "number" ? `calc(min(${/*width*/
+      a[1]}px, 100%))` : (
+        /*get_dimension*/
+        a[15](
+          /*width*/
+          a[1]
+        )
+      )), wt(
+        r,
+        "border-style",
+        /*variant*/
+        a[4]
+      ), wt(
+        r,
+        "overflow",
+        /*allow_overflow*/
+        a[11] ? "visible" : "hidden"
+      ), wt(
+        r,
+        "flex-grow",
+        /*scale*/
+        a[12]
+      ), wt(r, "min-width", `calc(min(${/*min_width*/
+      a[13]}px, 100%))`), wt(r, "border-width", "var(--block-border-width)");
+    },
+    m(g, y) {
+      y1(g, r, y), u && u.m(r, null), i = !0;
+    },
+    p(g, y) {
+      u && u.p && (!i || y & /*$$scope*/
+      131072) && k1(
+        u,
+        o,
+        g,
+        /*$$scope*/
+        g[17],
+        i ? g1(
+          o,
+          /*$$scope*/
+          g[17],
+          y,
+          null
+        ) : p1(
+          /*$$scope*/
+          g[17]
+        ),
+        null
+      ), pl(
+        /*tag*/
+        g[14]
+      )(r, p = b1(f, [
+        (!i || y & /*test_id*/
+        128) && { "data-testid": (
+          /*test_id*/
+          g[7]
+        ) },
+        (!i || y & /*elem_id*/
+        4) && { id: (
+          /*elem_id*/
+          g[2]
+        ) },
+        (!i || y & /*elem_classes*/
+        8 && s !== (s = "block " + /*elem_classes*/
+        g[3].join(" ") + " svelte-1t38q2d")) && { class: s }
+      ])), F0(
+        r,
+        "hidden",
+        /*visible*/
+        g[10] === !1
+      ), F0(
+        r,
+        "padded",
+        /*padding*/
+        g[6]
+      ), F0(
+        r,
+        "border_focus",
+        /*border_mode*/
+        g[5] === "focus"
+      ), F0(r, "hide-container", !/*explicit_call*/
+      g[8] && !/*container*/
+      g[9]), y & /*height*/
+      1 && wt(
+        r,
+        "height",
+        /*get_dimension*/
+        g[15](
+          /*height*/
+          g[0]
+        )
+      ), y & /*width*/
+      2 && wt(r, "width", typeof /*width*/
+      g[1] == "number" ? `calc(min(${/*width*/
+      g[1]}px, 100%))` : (
+        /*get_dimension*/
+        g[15](
+          /*width*/
+          g[1]
+        )
+      )), y & /*variant*/
+      16 && wt(
+        r,
+        "border-style",
+        /*variant*/
+        g[4]
+      ), y & /*allow_overflow*/
+      2048 && wt(
+        r,
+        "overflow",
+        /*allow_overflow*/
+        g[11] ? "visible" : "hidden"
+      ), y & /*scale*/
+      4096 && wt(
+        r,
+        "flex-grow",
+        /*scale*/
+        g[12]
+      ), y & /*min_width*/
+      8192 && wt(r, "min-width", `calc(min(${/*min_width*/
+      g[13]}px, 100%))`);
+    },
+    i(g) {
+      i || (ao(u, g), i = !0);
+    },
+    o(g) {
+      oo(u, g), i = !1;
+    },
+    d(g) {
+      g && d1(r), u && u.d(g);
+    }
+  };
+}
+function D1(a) {
+  let r, s = (
+    /*tag*/
+    a[14] && x1(a)
+  );
+  return {
+    c() {
+      s && s.c();
+    },
+    m(i, o) {
+      s && s.m(i, o), r = !0;
+    },
+    p(i, [o]) {
+      /*tag*/
+      i[14] && s.p(i, o);
+    },
+    i(i) {
+      r || (ao(s, i), r = !0);
+    },
+    o(i) {
+      oo(s, i), r = !1;
+    },
+    d(i) {
+      s && s.d(i);
+    }
+  };
+}
+function v1(a, r, s) {
+  let { $$slots: i = {}, $$scope: o } = r, { height: u = void 0 } = r, { width: f = void 0 } = r, { elem_id: p = "" } = r, { elem_classes: g = [] } = r, { variant: y = "solid" } = r, { border_mode: D = "base" } = r, { padding: T = !0 } = r, { type: P = "normal" } = r, { test_id: U = void 0 } = r, { explicit_call: K = !1 } = r, { container: ee = !0 } = r, { visible: Z = !0 } = r, { allow_overflow: R = !0 } = r, { scale: N = null } = r, { min_width: S = 0 } = r, M = P === "fieldset" ? "fieldset" : "div";
+  const L = (z) => {
+    if (z !== void 0) {
+      if (typeof z == "number")
+        return z + "px";
+      if (typeof z == "string")
+        return z;
+    }
+  };
+  return a.$$set = (z) => {
+    "height" in z && s(0, u = z.height), "width" in z && s(1, f = z.width), "elem_id" in z && s(2, p = z.elem_id), "elem_classes" in z && s(3, g = z.elem_classes), "variant" in z && s(4, y = z.variant), "border_mode" in z && s(5, D = z.border_mode), "padding" in z && s(6, T = z.padding), "type" in z && s(16, P = z.type), "test_id" in z && s(7, U = z.test_id), "explicit_call" in z && s(8, K = z.explicit_call), "container" in z && s(9, ee = z.container), "visible" in z && s(10, Z = z.visible), "allow_overflow" in z && s(11, R = z.allow_overflow), "scale" in z && s(12, N = z.scale), "min_width" in z && s(13, S = z.min_width), "$$scope" in z && s(17, o = z.$$scope);
+  }, [
+    u,
+    f,
+    p,
+    g,
+    y,
+    D,
+    T,
+    U,
+    K,
+    ee,
+    Z,
+    R,
+    N,
+    S,
+    M,
+    L,
+    P,
+    o,
+    i
+  ];
+}
+class A1 extends c1 {
+  constructor(r) {
+    super(), w1(this, r, v1, D1, _1, {
+      height: 0,
+      width: 1,
+      elem_id: 2,
+      elem_classes: 3,
+      variant: 4,
+      border_mode: 5,
+      padding: 6,
+      type: 16,
+      test_id: 7,
+      explicit_call: 8,
+      container: 9,
+      visible: 10,
+      allow_overflow: 11,
+      scale: 12,
+      min_width: 13
+    });
+  }
+}
+const {
+  SvelteComponent: S1,
+  append: hs,
+  attr: ir,
+  create_component: F1,
+  destroy_component: E1,
+  detach: C1,
+  element: gl,
+  init: T1,
+  insert: M1,
+  mount_component: z1,
+  safe_not_equal: B1,
+  set_data: N1,
+  space: R1,
+  text: I1,
+  toggle_class: E0,
+  transition_in: L1,
+  transition_out: O1
+} = window.__gradio__svelte__internal;
+function q1(a) {
+  let r, s, i, o, u, f;
+  return i = new /*Icon*/
+  a[1]({}), {
+    c() {
+      r = gl("label"), s = gl("span"), F1(i.$$.fragment), o = R1(), u = I1(
+        /*label*/
+        a[0]
+      ), ir(s, "class", "svelte-9gxdi0"), ir(r, "for", ""), ir(r, "data-testid", "block-label"), ir(r, "class", "svelte-9gxdi0"), E0(r, "hide", !/*show_label*/
+      a[2]), E0(r, "sr-only", !/*show_label*/
+      a[2]), E0(
+        r,
+        "float",
+        /*float*/
+        a[4]
+      ), E0(
+        r,
+        "hide-label",
+        /*disable*/
+        a[3]
+      );
+    },
+    m(p, g) {
+      M1(p, r, g), hs(r, s), z1(i, s, null), hs(r, o), hs(r, u), f = !0;
+    },
+    p(p, [g]) {
+      (!f || g & /*label*/
+      1) && N1(
+        u,
+        /*label*/
+        p[0]
+      ), (!f || g & /*show_label*/
+      4) && E0(r, "hide", !/*show_label*/
+      p[2]), (!f || g & /*show_label*/
+      4) && E0(r, "sr-only", !/*show_label*/
+      p[2]), (!f || g & /*float*/
+      16) && E0(
+        r,
+        "float",
+        /*float*/
+        p[4]
+      ), (!f || g & /*disable*/
+      8) && E0(
+        r,
+        "hide-label",
+        /*disable*/
+        p[3]
+      );
+    },
+    i(p) {
+      f || (L1(i.$$.fragment, p), f = !0);
+    },
+    o(p) {
+      O1(i.$$.fragment, p), f = !1;
+    },
+    d(p) {
+      p && C1(r), E1(i);
+    }
+  };
+}
+function P1(a, r, s) {
+  let { label: i = null } = r, { Icon: o } = r, { show_label: u = !0 } = r, { disable: f = !1 } = r, { float: p = !0 } = r;
+  return a.$$set = (g) => {
+    "label" in g && s(0, i = g.label), "Icon" in g && s(1, o = g.Icon), "show_label" in g && s(2, u = g.show_label), "disable" in g && s(3, f = g.disable), "float" in g && s(4, p = g.float);
+  }, [i, o, u, f, p];
+}
+class H1 extends S1 {
+  constructor(r) {
+    super(), T1(this, r, P1, q1, B1, {
+      label: 0,
+      Icon: 1,
+      show_label: 2,
+      disable: 3,
+      float: 4
+    });
+  }
+}
+const {
+  SvelteComponent: U1,
+  append: zs,
+  attr: m0,
+  bubble: G1,
+  create_component: V1,
+  destroy_component: W1,
+  detach: uo,
+  element: Bs,
+  init: j1,
+  insert: co,
+  listen: X1,
+  mount_component: Y1,
+  safe_not_equal: Z1,
+  set_data: K1,
+  set_style: lr,
+  space: Q1,
+  text: J1,
+  toggle_class: zt,
+  transition_in: $1,
+  transition_out: ec
+} = window.__gradio__svelte__internal;
+function bl(a) {
+  let r, s;
+  return {
+    c() {
+      r = Bs("span"), s = J1(
+        /*label*/
+        a[1]
+      ), m0(r, "class", "svelte-lpi64a");
+    },
+    m(i, o) {
+      co(i, r, o), zs(r, s);
+    },
+    p(i, o) {
+      o & /*label*/
+      2 && K1(
+        s,
+        /*label*/
+        i[1]
+      );
+    },
+    d(i) {
+      i && uo(r);
+    }
+  };
+}
+function tc(a) {
+  let r, s, i, o, u, f, p, g = (
+    /*show_label*/
+    a[2] && bl(a)
+  );
+  return o = new /*Icon*/
+  a[0]({}), {
+    c() {
+      r = Bs("button"), g && g.c(), s = Q1(), i = Bs("div"), V1(o.$$.fragment), m0(i, "class", "svelte-lpi64a"), zt(
+        i,
+        "small",
+        /*size*/
+        a[4] === "small"
+      ), zt(
+        i,
+        "large",
+        /*size*/
+        a[4] === "large"
+      ), r.disabled = /*disabled*/
+      a[7], m0(
+        r,
+        "aria-label",
+        /*label*/
+        a[1]
+      ), m0(
+        r,
+        "aria-haspopup",
+        /*hasPopup*/
+        a[8]
+      ), m0(
+        r,
+        "title",
+        /*label*/
+        a[1]
+      ), m0(r, "class", "svelte-lpi64a"), zt(
+        r,
+        "pending",
+        /*pending*/
+        a[3]
+      ), zt(
+        r,
+        "padded",
+        /*padded*/
+        a[5]
+      ), zt(
+        r,
+        "highlight",
+        /*highlight*/
+        a[6]
+      ), zt(
+        r,
+        "transparent",
+        /*transparent*/
+        a[9]
+      ), lr(r, "color", !/*disabled*/
+      a[7] && /*_color*/
+      a[11] ? (
+        /*_color*/
+        a[11]
+      ) : "var(--block-label-text-color)"), lr(r, "--bg-color", /*disabled*/
+      a[7] ? "auto" : (
+        /*background*/
+        a[10]
+      ));
+    },
+    m(y, D) {
+      co(y, r, D), g && g.m(r, null), zs(r, s), zs(r, i), Y1(o, i, null), u = !0, f || (p = X1(
+        r,
+        "click",
+        /*click_handler*/
+        a[13]
+      ), f = !0);
+    },
+    p(y, [D]) {
+      /*show_label*/
+      y[2] ? g ? g.p(y, D) : (g = bl(y), g.c(), g.m(r, s)) : g && (g.d(1), g = null), (!u || D & /*size*/
+      16) && zt(
+        i,
+        "small",
+        /*size*/
+        y[4] === "small"
+      ), (!u || D & /*size*/
+      16) && zt(
+        i,
+        "large",
+        /*size*/
+        y[4] === "large"
+      ), (!u || D & /*disabled*/
+      128) && (r.disabled = /*disabled*/
+      y[7]), (!u || D & /*label*/
+      2) && m0(
+        r,
+        "aria-label",
+        /*label*/
+        y[1]
+      ), (!u || D & /*hasPopup*/
+      256) && m0(
+        r,
+        "aria-haspopup",
+        /*hasPopup*/
+        y[8]
+      ), (!u || D & /*label*/
+      2) && m0(
+        r,
+        "title",
+        /*label*/
+        y[1]
+      ), (!u || D & /*pending*/
+      8) && zt(
+        r,
+        "pending",
+        /*pending*/
+        y[3]
+      ), (!u || D & /*padded*/
+      32) && zt(
+        r,
+        "padded",
+        /*padded*/
+        y[5]
+      ), (!u || D & /*highlight*/
+      64) && zt(
+        r,
+        "highlight",
+        /*highlight*/
+        y[6]
+      ), (!u || D & /*transparent*/
+      512) && zt(
+        r,
+        "transparent",
+        /*transparent*/
+        y[9]
+      ), D & /*disabled, _color*/
+      2176 && lr(r, "color", !/*disabled*/
+      y[7] && /*_color*/
+      y[11] ? (
+        /*_color*/
+        y[11]
+      ) : "var(--block-label-text-color)"), D & /*disabled, background*/
+      1152 && lr(r, "--bg-color", /*disabled*/
+      y[7] ? "auto" : (
+        /*background*/
+        y[10]
+      ));
+    },
+    i(y) {
+      u || ($1(o.$$.fragment, y), u = !0);
+    },
+    o(y) {
+      ec(o.$$.fragment, y), u = !1;
+    },
+    d(y) {
+      y && uo(r), g && g.d(), W1(o), f = !1, p();
+    }
+  };
+}
+function nc(a, r, s) {
+  let i, { Icon: o } = r, { label: u = "" } = r, { show_label: f = !1 } = r, { pending: p = !1 } = r, { size: g = "small" } = r, { padded: y = !0 } = r, { highlight: D = !1 } = r, { disabled: T = !1 } = r, { hasPopup: P = !1 } = r, { color: U = "var(--block-label-text-color)" } = r, { transparent: K = !1 } = r, { background: ee = "var(--background-fill-primary)" } = r;
+  function Z(R) {
+    G1.call(this, a, R);
+  }
+  return a.$$set = (R) => {
+    "Icon" in R && s(0, o = R.Icon), "label" in R && s(1, u = R.label), "show_label" in R && s(2, f = R.show_label), "pending" in R && s(3, p = R.pending), "size" in R && s(4, g = R.size), "padded" in R && s(5, y = R.padded), "highlight" in R && s(6, D = R.highlight), "disabled" in R && s(7, T = R.disabled), "hasPopup" in R && s(8, P = R.hasPopup), "color" in R && s(12, U = R.color), "transparent" in R && s(9, K = R.transparent), "background" in R && s(10, ee = R.background);
+  }, a.$$.update = () => {
+    a.$$.dirty & /*highlight, color*/
+    4160 && s(11, i = D ? "var(--color-accent)" : U);
+  }, [
+    o,
+    u,
+    f,
+    p,
+    g,
+    y,
+    D,
+    T,
+    P,
+    K,
+    ee,
+    i,
+    U,
+    Z
+  ];
+}
+class rc extends U1 {
+  constructor(r) {
+    super(), j1(this, r, nc, tc, Z1, {
+      Icon: 0,
+      label: 1,
+      show_label: 2,
+      pending: 3,
+      size: 4,
+      padded: 5,
+      highlight: 6,
+      disabled: 7,
+      hasPopup: 8,
+      color: 12,
+      transparent: 9,
+      background: 10
+    });
+  }
+}
+const {
+  SvelteComponent: sc,
+  append: wl,
+  attr: yt,
+  detach: ic,
+  init: lc,
+  insert: ac,
+  noop: fs,
+  safe_not_equal: oc,
+  svg_element: ds
+} = window.__gradio__svelte__internal;
+function uc(a) {
+  let r, s, i;
+  return {
+    c() {
+      r = ds("svg"), s = ds("path"), i = ds("path"), yt(s, "fill", "currentColor"), yt(s, "d", "M17.74 30L16 29l4-7h6a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V8a4 4 0 0 1 4-4h20a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4h-4.84Z"), yt(i, "fill", "currentColor"), yt(i, "d", "M8 10h16v2H8zm0 6h10v2H8z"), yt(r, "xmlns", "http://www.w3.org/2000/svg"), yt(r, "xmlns:xlink", "http://www.w3.org/1999/xlink"), yt(r, "aria-hidden", "true"), yt(r, "role", "img"), yt(r, "class", "iconify iconify--carbon"), yt(r, "width", "100%"), yt(r, "height", "100%"), yt(r, "preserveAspectRatio", "xMidYMid meet"), yt(r, "viewBox", "0 0 32 32");
+    },
+    m(o, u) {
+      ac(o, r, u), wl(r, s), wl(r, i);
+    },
+    p: fs,
+    i: fs,
+    o: fs,
+    d(o) {
+      o && ic(r);
+    }
+  };
+}
+class cc extends sc {
+  constructor(r) {
+    super(), lc(this, r, null, uc, oc, {});
+  }
+}
+const {
+  SvelteComponent: hc,
+  append: fc,
+  attr: C0,
+  detach: dc,
+  init: mc,
+  insert: pc,
+  noop: ms,
+  safe_not_equal: gc,
+  svg_element: yl
+} = window.__gradio__svelte__internal;
+function bc(a) {
+  let r, s;
+  return {
+    c() {
+      r = yl("svg"), s = yl("polyline"), C0(s, "points", "20 6 9 17 4 12"), C0(r, "xmlns", "http://www.w3.org/2000/svg"), C0(r, "viewBox", "2 0 20 20"), C0(r, "fill", "none"), C0(r, "stroke", "currentColor"), C0(r, "stroke-width", "3"), C0(r, "stroke-linecap", "round"), C0(r, "stroke-linejoin", "round");
+    },
+    m(i, o) {
+      pc(i, r, o), fc(r, s);
+    },
+    p: ms,
+    i: ms,
+    o: ms,
+    d(i) {
+      i && dc(r);
+    }
+  };
+}
+class wc extends hc {
+  constructor(r) {
+    super(), mc(this, r, null, bc, gc, {});
+  }
+}
+const {
+  SvelteComponent: yc,
+  append: _c,
+  attr: vn,
+  detach: kc,
+  init: xc,
+  insert: Dc,
+  noop: ps,
+  safe_not_equal: vc,
+  svg_element: _l
+} = window.__gradio__svelte__internal;
+function Ac(a) {
+  let r, s;
+  return {
+    c() {
+      r = _l("svg"), s = _l("path"), vn(s, "d", "M23,20a5,5,0,0,0-3.89,1.89L11.8,17.32a4.46,4.46,0,0,0,0-2.64l7.31-4.57A5,5,0,1,0,18,7a4.79,4.79,0,0,0,.2,1.32l-7.31,4.57a5,5,0,1,0,0,6.22l7.31,4.57A4.79,4.79,0,0,0,18,25a5,5,0,1,0,5-5ZM23,4a3,3,0,1,1-3,3A3,3,0,0,1,23,4ZM7,19a3,3,0,1,1,3-3A3,3,0,0,1,7,19Zm16,9a3,3,0,1,1,3-3A3,3,0,0,1,23,28Z"), vn(s, "fill", "currentColor"), vn(r, "id", "icon"), vn(r, "xmlns", "http://www.w3.org/2000/svg"), vn(r, "viewBox", "0 0 32 32");
+    },
+    m(i, o) {
+      Dc(i, r, o), _c(r, s);
+    },
+    p: ps,
+    i: ps,
+    o: ps,
+    d(i) {
+      i && kc(r);
+    }
+  };
+}
+class Sc extends yc {
+  constructor(r) {
+    super(), xc(this, r, null, Ac, vc, {});
+  }
+}
+const {
+  SvelteComponent: Fc,
+  append: kl,
+  attr: H0,
+  detach: Ec,
+  init: Cc,
+  insert: Tc,
+  noop: gs,
+  safe_not_equal: Mc,
+  svg_element: bs
+} = window.__gradio__svelte__internal;
+function zc(a) {
+  let r, s, i;
+  return {
+    c() {
+      r = bs("svg"), s = bs("path"), i = bs("path"), H0(s, "fill", "currentColor"), H0(s, "d", "M28 10v18H10V10h18m0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2Z"), H0(i, "fill", "currentColor"), H0(i, "d", "M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"), H0(r, "xmlns", "http://www.w3.org/2000/svg"), H0(r, "viewBox", "0 0 33 33"), H0(r, "color", "currentColor");
+    },
+    m(o, u) {
+      Tc(o, r, u), kl(r, s), kl(r, i);
+    },
+    p: gs,
+    i: gs,
+    o: gs,
+    d(o) {
+      o && Ec(r);
+    }
+  };
+}
+class Bc extends Fc {
+  constructor(r) {
+    super(), Cc(this, r, null, zc, Mc, {});
+  }
+}
+const {
+  SvelteComponent: Nc,
+  append: xl,
+  attr: at,
+  detach: Rc,
+  init: Ic,
+  insert: Lc,
+  noop: Dl,
+  safe_not_equal: Oc,
+  svg_element: ws
+} = window.__gradio__svelte__internal;
+function qc(a) {
+  let r, s, i, o;
+  return {
+    c() {
+      r = ws("svg"), s = ws("path"), i = ws("path"), at(s, "stroke", "currentColor"), at(s, "stroke-width", "1.5"), at(s, "stroke-linecap", "round"), at(s, "d", "M16.472 3.5H4.1a.6.6 0 0 0-.6.6v9.8a.6.6 0 0 0 .6.6h2.768a2 2 0 0 1 1.715.971l2.71 4.517a1.631 1.631 0 0 0 2.961-1.308l-1.022-3.408a.6.6 0 0 1 .574-.772h4.575a2 2 0 0 0 1.93-2.526l-1.91-7A2 2 0 0 0 16.473 3.5Z"), at(i, "stroke", "currentColor"), at(i, "stroke-width", "1.5"), at(i, "stroke-linecap", "round"), at(i, "stroke-linejoin", "round"), at(i, "d", "M7 14.5v-11"), at(r, "xmlns", "http://www.w3.org/2000/svg"), at(r, "viewBox", "0 0 24 24"), at(r, "fill", o = /*selected*/
+      a[0] ? "currentColor" : "none"), at(r, "stroke-width", "1.5"), at(r, "color", "currentColor");
+    },
+    m(u, f) {
+      Lc(u, r, f), xl(r, s), xl(r, i);
+    },
+    p(u, [f]) {
+      f & /*selected*/
+      1 && o !== (o = /*selected*/
+      u[0] ? "currentColor" : "none") && at(r, "fill", o);
+    },
+    i: Dl,
+    o: Dl,
+    d(u) {
+      u && Rc(r);
+    }
+  };
+}
+function Pc(a, r, s) {
+  let { selected: i } = r;
+  return a.$$set = (o) => {
+    "selected" in o && s(0, i = o.selected);
+  }, [i];
+}
+class Hc extends Nc {
+  constructor(r) {
+    super(), Ic(this, r, Pc, qc, Oc, { selected: 0 });
+  }
+}
+const {
+  SvelteComponent: Uc,
+  append: vl,
+  attr: ot,
+  detach: Gc,
+  init: Vc,
+  insert: Wc,
+  noop: Al,
+  safe_not_equal: jc,
+  svg_element: ys
+} = window.__gradio__svelte__internal;
+function Xc(a) {
+  let r, s, i, o;
+  return {
+    c() {
+      r = ys("svg"), s = ys("path"), i = ys("path"), ot(s, "stroke", "currentColor"), ot(s, "stroke-width", "1.5"), ot(s, "stroke-linecap", "round"), ot(s, "d", "M16.472 20H4.1a.6.6 0 0 1-.6-.6V9.6a.6.6 0 0 1 .6-.6h2.768a2 2 0 0 0 1.715-.971l2.71-4.517a1.631 1.631 0 0 1 2.961 1.308l-1.022 3.408a.6.6 0 0 0 .574.772h4.575a2 2 0 0 1 1.93 2.526l-1.91 7A2 2 0 0 1 16.473 20Z"), ot(i, "stroke", "currentColor"), ot(i, "stroke-width", "1.5"), ot(i, "stroke-linecap", "round"), ot(i, "stroke-linejoin", "round"), ot(i, "d", "M7 20V9"), ot(r, "xmlns", "http://www.w3.org/2000/svg"), ot(r, "viewBox", "0 0 24 24"), ot(r, "fill", o = /*selected*/
+      a[0] ? "currentColor" : "none"), ot(r, "stroke-width", "1.5"), ot(r, "color", "currentColor");
+    },
+    m(u, f) {
+      Wc(u, r, f), vl(r, s), vl(r, i);
+    },
+    p(u, [f]) {
+      f & /*selected*/
+      1 && o !== (o = /*selected*/
+      u[0] ? "currentColor" : "none") && ot(r, "fill", o);
+    },
+    i: Al,
+    o: Al,
+    d(u) {
+      u && Gc(r);
+    }
+  };
+}
+function Yc(a, r, s) {
+  let { selected: i } = r;
+  return a.$$set = (o) => {
+    "selected" in o && s(0, i = o.selected);
+  }, [i];
+}
+class Zc extends Uc {
+  constructor(r) {
+    super(), Vc(this, r, Yc, Xc, jc, { selected: 0 });
+  }
+}
+const {
+  SvelteComponent: Kc,
+  create_component: Qc,
+  destroy_component: Jc,
+  init: $c,
+  mount_component: e4,
+  safe_not_equal: t4,
+  transition_in: n4,
+  transition_out: r4
+} = window.__gradio__svelte__internal, { createEventDispatcher: s4 } = window.__gradio__svelte__internal;
+function i4(a) {
+  let r, s;
+  return r = new rc({
+    props: {
+      Icon: Sc,
+      label: (
+        /*i18n*/
+        a[2]("common.share")
+      ),
+      pending: (
+        /*pending*/
+        a[3]
+      )
+    }
+  }), r.$on(
+    "click",
+    /*click_handler*/
+    a[5]
+  ), {
+    c() {
+      Qc(r.$$.fragment);
+    },
+    m(i, o) {
+      e4(r, i, o), s = !0;
+    },
+    p(i, [o]) {
+      const u = {};
+      o & /*i18n*/
+      4 && (u.label = /*i18n*/
+      i[2]("common.share")), o & /*pending*/
+      8 && (u.pending = /*pending*/
+      i[3]), r.$set(u);
+    },
+    i(i) {
+      s || (n4(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      r4(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Jc(r, i);
+    }
+  };
+}
+function l4(a, r, s) {
+  const i = s4();
+  let { formatter: o } = r, { value: u } = r, { i18n: f } = r, p = !1;
+  const g = async () => {
+    try {
+      s(3, p = !0);
+      const y = await o(u);
+      i("share", { description: y });
+    } catch (y) {
+      console.error(y);
+      let D = y instanceof gr ? y.message : "Share failed.";
+      i("error", D);
+    } finally {
+      s(3, p = !1);
+    }
+  };
+  return a.$$set = (y) => {
+    "formatter" in y && s(0, o = y.formatter), "value" in y && s(1, u = y.value), "i18n" in y && s(2, f = y.i18n);
+  }, [o, u, f, p, i, g];
+}
+class a4 extends Kc {
+  constructor(r) {
+    super(), $c(this, r, l4, i4, t4, { formatter: 0, value: 1, i18n: 2 });
+  }
+}
+const { setContext: g3, getContext: o4 } = window.__gradio__svelte__internal, u4 = "WORKER_PROXY_CONTEXT_KEY";
+function c4() {
+  return o4(u4);
+}
+function h4(a) {
+  return a.host === window.location.host || a.host === "localhost:7860" || a.host === "127.0.0.1:7860" || // Ref: https://github.com/gradio-app/gradio/blob/v3.32.0/js/app/src/Index.svelte#L194
+  a.host === "lite.local";
+}
+function f4(a, r) {
+  const s = r.toLowerCase();
+  for (const [i, o] of Object.entries(a))
+    if (i.toLowerCase() === s)
+      return o;
+}
+function d4(a) {
+  if (a == null)
+    return !1;
+  const r = new URL(a, window.location.href);
+  return !(!h4(r) || r.protocol !== "http:" && r.protocol !== "https:");
+}
+async function m4(a) {
+  if (a == null || !d4(a))
+    return a;
+  const r = c4();
+  if (r == null)
+    return a;
+  const i = new URL(a, window.location.href).pathname;
+  return r.httpRequest({
+    method: "GET",
+    path: i,
+    headers: {},
+    query_string: ""
+  }).then((o) => {
+    if (o.status !== 200)
+      throw new Error(`Failed to get file ${i} from the Wasm worker.`);
+    const u = new Blob([o.body], {
+      type: f4(o.headers, "content-type")
+    });
+    return URL.createObjectURL(u);
+  });
+}
+const {
+  SvelteComponent: p4,
+  assign: Ns,
+  compute_rest_props: Sl,
+  detach: g4,
+  element: b4,
+  exclude_internal_props: w4,
+  get_spread_update: y4,
+  init: _4,
+  insert: k4,
+  noop: Fl,
+  safe_not_equal: x4,
+  set_attributes: El,
+  src_url_equal: D4,
+  toggle_class: Cl
+} = window.__gradio__svelte__internal;
+function v4(a) {
+  let r, s, i = [
+    {
+      src: s = /*resolved_src*/
+      a[0]
+    },
+    /*$$restProps*/
+    a[1]
+  ], o = {};
+  for (let u = 0; u < i.length; u += 1)
+    o = Ns(o, i[u]);
+  return {
+    c() {
+      r = b4("img"), El(r, o), Cl(r, "svelte-kxeri3", !0);
+    },
+    m(u, f) {
+      k4(u, r, f);
+    },
+    p(u, [f]) {
+      El(r, o = y4(i, [
+        f & /*resolved_src*/
+        1 && !D4(r.src, s = /*resolved_src*/
+        u[0]) && { src: s },
+        f & /*$$restProps*/
+        2 && /*$$restProps*/
+        u[1]
+      ])), Cl(r, "svelte-kxeri3", !0);
+    },
+    i: Fl,
+    o: Fl,
+    d(u) {
+      u && g4(r);
+    }
+  };
+}
+function A4(a, r, s) {
+  const i = ["src"];
+  let o = Sl(r, i), { src: u = void 0 } = r, f, p;
+  return a.$$set = (g) => {
+    r = Ns(Ns({}, r), w4(g)), s(1, o = Sl(r, i)), "src" in g && s(2, u = g.src);
+  }, a.$$.update = () => {
+    if (a.$$.dirty & /*src, latest_src*/
+    12) {
+      s(0, f = u), s(3, p = u);
+      const g = u;
+      m4(g).then((y) => {
+        p === g && s(0, f = y);
+      });
+    }
+  }, [f, o, u, p];
+}
+class S4 extends p4 {
+  constructor(r) {
+    super(), _4(this, r, A4, v4, x4, { src: 2 });
+  }
+}
+var Tl;
+(function(a) {
+  a.LOAD = "LOAD", a.EXEC = "EXEC", a.WRITE_FILE = "WRITE_FILE", a.READ_FILE = "READ_FILE", a.DELETE_FILE = "DELETE_FILE", a.RENAME = "RENAME", a.CREATE_DIR = "CREATE_DIR", a.LIST_DIR = "LIST_DIR", a.DELETE_DIR = "DELETE_DIR", a.ERROR = "ERROR", a.DOWNLOAD = "DOWNLOAD", a.PROGRESS = "PROGRESS", a.LOG = "LOG", a.MOUNT = "MOUNT", a.UNMOUNT = "UNMOUNT";
+})(Tl || (Tl = {}));
+/*! @license DOMPurify 3.0.11 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.11/LICENSE */
+const {
+  entries: ho,
+  setPrototypeOf: Ml,
+  isFrozen: F4,
+  getPrototypeOf: E4,
+  getOwnPropertyDescriptor: C4
+} = Object;
+let {
+  freeze: ut,
+  seal: It,
+  create: fo
+} = Object, {
+  apply: Rs,
+  construct: Is
+} = typeof Reflect < "u" && Reflect;
+ut || (ut = function(r) {
+  return r;
+});
+It || (It = function(r) {
+  return r;
+});
+Rs || (Rs = function(r, s, i) {
+  return r.apply(s, i);
+});
+Is || (Is = function(r, s) {
+  return new r(...s);
+});
+const ar = Dt(Array.prototype.forEach), zl = Dt(Array.prototype.pop), An = Dt(Array.prototype.push), br = Dt(String.prototype.toLowerCase), _s = Dt(String.prototype.toString), Bl = Dt(String.prototype.match), Sn = Dt(String.prototype.replace), T4 = Dt(String.prototype.indexOf), M4 = Dt(String.prototype.trim), Vt = Dt(Object.prototype.hasOwnProperty), _t = Dt(RegExp.prototype.test), Fn = z4(TypeError);
+function Dt(a) {
+  return function(r) {
+    for (var s = arguments.length, i = new Array(s > 1 ? s - 1 : 0), o = 1; o < s; o++)
+      i[o - 1] = arguments[o];
+    return Rs(a, r, i);
+  };
+}
+function z4(a) {
+  return function() {
+    for (var r = arguments.length, s = new Array(r), i = 0; i < r; i++)
+      s[i] = arguments[i];
+    return Is(a, s);
+  };
+}
+function ye(a, r) {
+  let s = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : br;
+  Ml && Ml(a, null);
+  let i = r.length;
+  for (; i--; ) {
+    let o = r[i];
+    if (typeof o == "string") {
+      const u = s(o);
+      u !== o && (F4(r) || (r[i] = u), o = u);
+    }
+    a[o] = !0;
+  }
+  return a;
+}
+function B4(a) {
+  for (let r = 0; r < a.length; r++)
+    Vt(a, r) || (a[r] = null);
+  return a;
+}
+function U0(a) {
+  const r = fo(null);
+  for (const [s, i] of ho(a))
+    Vt(a, s) && (Array.isArray(i) ? r[s] = B4(i) : i && typeof i == "object" && i.constructor === Object ? r[s] = U0(i) : r[s] = i);
+  return r;
+}
+function or(a, r) {
+  for (; a !== null; ) {
+    const i = C4(a, r);
+    if (i) {
+      if (i.get)
+        return Dt(i.get);
+      if (typeof i.value == "function")
+        return Dt(i.value);
+    }
+    a = E4(a);
+  }
+  function s() {
+    return null;
+  }
+  return s;
+}
+const Nl = ut(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]), ks = ut(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]), xs = ut(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]), N4 = ut(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]), Ds = ut(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]), R4 = ut(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]), Rl = ut(["#text"]), Il = ut(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "xmlns", "slot"]), vs = ut(["accent-height", "accumulate", "additive", "alignment-baseline", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]), Ll = ut(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]), ur = ut(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]), I4 = It(/\{\{[\w\W]*|[\w\W]*\}\}/gm), L4 = It(/<%[\w\W]*|[\w\W]*%>/gm), O4 = It(/\${[\w\W]*}/gm), q4 = It(/^data-[\-\w.\u00B7-\uFFFF]/), P4 = It(/^aria-[\-\w]+$/), mo = It(
+  /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
+  // eslint-disable-line no-useless-escape
+), H4 = It(/^(?:\w+script|data):/i), U4 = It(
+  /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
+  // eslint-disable-line no-control-regex
+), po = It(/^html$/i), G4 = It(/^[a-z][.\w]*(-[.\w]+)+$/i);
+var Ol = /* @__PURE__ */ Object.freeze({
+  __proto__: null,
+  MUSTACHE_EXPR: I4,
+  ERB_EXPR: L4,
+  TMPLIT_EXPR: O4,
+  DATA_ATTR: q4,
+  ARIA_ATTR: P4,
+  IS_ALLOWED_URI: mo,
+  IS_SCRIPT_OR_DATA: H4,
+  ATTR_WHITESPACE: U4,
+  DOCTYPE_NAME: po,
+  CUSTOM_ELEMENT: G4
+});
+const V4 = function() {
+  return typeof window > "u" ? null : window;
+}, W4 = function(r, s) {
+  if (typeof r != "object" || typeof r.createPolicy != "function")
+    return null;
+  let i = null;
+  const o = "data-tt-policy-suffix";
+  s && s.hasAttribute(o) && (i = s.getAttribute(o));
+  const u = "dompurify" + (i ? "#" + i : "");
+  try {
+    return r.createPolicy(u, {
+      createHTML(f) {
+        return f;
+      },
+      createScriptURL(f) {
+        return f;
+      }
+    });
+  } catch {
+    return console.warn("TrustedTypes policy " + u + " could not be created."), null;
+  }
+};
+function go() {
+  let a = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : V4();
+  const r = (G) => go(G);
+  if (r.version = "3.0.11", r.removed = [], !a || !a.document || a.document.nodeType !== 9)
+    return r.isSupported = !1, r;
+  let {
+    document: s
+  } = a;
+  const i = s, o = i.currentScript, {
+    DocumentFragment: u,
+    HTMLTemplateElement: f,
+    Node: p,
+    Element: g,
+    NodeFilter: y,
+    NamedNodeMap: D = a.NamedNodeMap || a.MozNamedAttrMap,
+    HTMLFormElement: T,
+    DOMParser: P,
+    trustedTypes: U
+  } = a, K = g.prototype, ee = or(K, "cloneNode"), Z = or(K, "nextSibling"), R = or(K, "childNodes"), N = or(K, "parentNode");
+  if (typeof f == "function") {
+    const G = s.createElement("template");
+    G.content && G.content.ownerDocument && (s = G.content.ownerDocument);
+  }
+  let S, M = "";
+  const {
+    implementation: L,
+    createNodeIterator: z,
+    createDocumentFragment: H,
+    getElementsByTagName: te
+  } = s, {
+    importNode: Q
+  } = i;
+  let ce = {};
+  r.isSupported = typeof ho == "function" && typeof N == "function" && L && L.createHTMLDocument !== void 0;
+  const {
+    MUSTACHE_EXPR: oe,
+    ERB_EXPR: Ce,
+    TMPLIT_EXPR: ke,
+    DATA_ATTR: Pe,
+    ARIA_ATTR: et,
+    IS_SCRIPT_OR_DATA: vt,
+    ATTR_WHITESPACE: mt,
+    CUSTOM_ELEMENT: Be
+  } = Ol;
+  let {
+    IS_ALLOWED_URI: J
+  } = Ol, _e = null;
+  const ae = ye({}, [...Nl, ...ks, ...xs, ...Ds, ...Rl]);
+  let X = null;
+  const ie = ye({}, [...Il, ...vs, ...Ll, ...ur]);
+  let he = Object.seal(fo(null, {
+    tagNameCheck: {
+      writable: !0,
+      configurable: !1,
+      enumerable: !0,
+      value: null
+    },
+    attributeNameCheck: {
+      writable: !0,
+      configurable: !1,
+      enumerable: !0,
+      value: null
+    },
+    allowCustomizedBuiltInElements: {
+      writable: !0,
+      configurable: !1,
+      enumerable: !0,
+      value: !1
+    }
+  })), tt = null, it = null, l0 = !0, a0 = !0, I0 = !1, g0 = !0, pt = !1, Ot = !1, o0 = !1, pn = !1, b0 = !1, L0 = !1, K0 = !1, w0 = !0, gt = !1;
+  const Q0 = "user-content-";
+  let J0 = !0, O0 = !1, Wt = {}, jt = null;
+  const Rn = ye({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
+  let In = null;
+  const gn = ye({}, ["audio", "video", "img", "source", "image", "track"]);
+  let $0 = null;
+  const At = ye({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]), en = "http://www.w3.org/1998/Math/MathML", y0 = "http://www.w3.org/2000/svg", qt = "http://www.w3.org/1999/xhtml";
+  let u0 = qt, Ne = !1, $ = null;
+  const Xt = ye({}, [en, y0, qt], _s);
+  let _0 = null;
+  const Ln = ["application/xhtml+xml", "text/html"], On = "text/html";
+  let Ge = null, Yt = null;
+  const Tr = s.createElement("form"), qn = function(C) {
+    return C instanceof RegExp || C instanceof Function;
+  }, st = function() {
+    let C = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
+    if (!(Yt && Yt === C)) {
+      if ((!C || typeof C != "object") && (C = {}), C = U0(C), _0 = // eslint-disable-next-line unicorn/prefer-includes
+      Ln.indexOf(C.PARSER_MEDIA_TYPE) === -1 ? On : C.PARSER_MEDIA_TYPE, Ge = _0 === "application/xhtml+xml" ? _s : br, _e = Vt(C, "ALLOWED_TAGS") ? ye({}, C.ALLOWED_TAGS, Ge) : ae, X = Vt(C, "ALLOWED_ATTR") ? ye({}, C.ALLOWED_ATTR, Ge) : ie, $ = Vt(C, "ALLOWED_NAMESPACES") ? ye({}, C.ALLOWED_NAMESPACES, _s) : Xt, $0 = Vt(C, "ADD_URI_SAFE_ATTR") ? ye(
+        U0(At),
+        // eslint-disable-line indent
+        C.ADD_URI_SAFE_ATTR,
+        // eslint-disable-line indent
+        Ge
+        // eslint-disable-line indent
+      ) : At, In = Vt(C, "ADD_DATA_URI_TAGS") ? ye(
+        U0(gn),
+        // eslint-disable-line indent
+        C.ADD_DATA_URI_TAGS,
+        // eslint-disable-line indent
+        Ge
+        // eslint-disable-line indent
+      ) : gn, jt = Vt(C, "FORBID_CONTENTS") ? ye({}, C.FORBID_CONTENTS, Ge) : Rn, tt = Vt(C, "FORBID_TAGS") ? ye({}, C.FORBID_TAGS, Ge) : {}, it = Vt(C, "FORBID_ATTR") ? ye({}, C.FORBID_ATTR, Ge) : {}, Wt = Vt(C, "USE_PROFILES") ? C.USE_PROFILES : !1, l0 = C.ALLOW_ARIA_ATTR !== !1, a0 = C.ALLOW_DATA_ATTR !== !1, I0 = C.ALLOW_UNKNOWN_PROTOCOLS || !1, g0 = C.ALLOW_SELF_CLOSE_IN_ATTR !== !1, pt = C.SAFE_FOR_TEMPLATES || !1, Ot = C.WHOLE_DOCUMENT || !1, b0 = C.RETURN_DOM || !1, L0 = C.RETURN_DOM_FRAGMENT || !1, K0 = C.RETURN_TRUSTED_TYPE || !1, pn = C.FORCE_BODY || !1, w0 = C.SANITIZE_DOM !== !1, gt = C.SANITIZE_NAMED_PROPS || !1, J0 = C.KEEP_CONTENT !== !1, O0 = C.IN_PLACE || !1, J = C.ALLOWED_URI_REGEXP || mo, u0 = C.NAMESPACE || qt, he = C.CUSTOM_ELEMENT_HANDLING || {}, C.CUSTOM_ELEMENT_HANDLING && qn(C.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (he.tagNameCheck = C.CUSTOM_ELEMENT_HANDLING.tagNameCheck), C.CUSTOM_ELEMENT_HANDLING && qn(C.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (he.attributeNameCheck = C.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), C.CUSTOM_ELEMENT_HANDLING && typeof C.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements == "boolean" && (he.allowCustomizedBuiltInElements = C.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), pt && (a0 = !1), L0 && (b0 = !0), Wt && (_e = ye({}, Rl), X = [], Wt.html === !0 && (ye(_e, Nl), ye(X, Il)), Wt.svg === !0 && (ye(_e, ks), ye(X, vs), ye(X, ur)), Wt.svgFilters === !0 && (ye(_e, xs), ye(X, vs), ye(X, ur)), Wt.mathMl === !0 && (ye(_e, Ds), ye(X, Ll), ye(X, ur))), C.ADD_TAGS && (_e === ae && (_e = U0(_e)), ye(_e, C.ADD_TAGS, Ge)), C.ADD_ATTR && (X === ie && (X = U0(X)), ye(X, C.ADD_ATTR, Ge)), C.ADD_URI_SAFE_ATTR && ye($0, C.ADD_URI_SAFE_ATTR, Ge), C.FORBID_CONTENTS && (jt === Rn && (jt = U0(jt)), ye(jt, C.FORBID_CONTENTS, Ge)), J0 && (_e["#text"] = !0), Ot && ye(_e, ["html", "head", "body"]), _e.table && (ye(_e, ["tbody"]), delete tt.tbody), C.TRUSTED_TYPES_POLICY) {
+        if (typeof C.TRUSTED_TYPES_POLICY.createHTML != "function")
+          throw Fn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
+        if (typeof C.TRUSTED_TYPES_POLICY.createScriptURL != "function")
+          throw Fn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
+        S = C.TRUSTED_TYPES_POLICY, M = S.createHTML("");
+      } else
+        S === void 0 && (S = W4(U, o)), S !== null && typeof M == "string" && (M = S.createHTML(""));
+      ut && ut(C), Yt = C;
+    }
+  }, St = ye({}, ["mi", "mo", "mn", "ms", "mtext"]), Pt = ye({}, ["foreignobject", "desc", "title", "annotation-xml"]), bn = ye({}, ["title", "style", "font", "a", "script"]), wn = ye({}, [...ks, ...xs, ...N4]), Pn = ye({}, [...Ds, ...R4]), Mr = function(C) {
+    let j = N(C);
+    (!j || !j.tagName) && (j = {
+      namespaceURI: u0,
+      tagName: "template"
+    });
+    const le = br(C.tagName), v = br(j.tagName);
+    return $[C.namespaceURI] ? C.namespaceURI === y0 ? j.namespaceURI === qt ? le === "svg" : j.namespaceURI === en ? le === "svg" && (v === "annotation-xml" || St[v]) : !!wn[le] : C.namespaceURI === en ? j.namespaceURI === qt ? le === "math" : j.namespaceURI === y0 ? le === "math" && Pt[v] : !!Pn[le] : C.namespaceURI === qt ? j.namespaceURI === y0 && !Pt[v] || j.namespaceURI === en && !St[v] ? !1 : !Pn[le] && (bn[le] || !wn[le]) : !!(_0 === "application/xhtml+xml" && $[C.namespaceURI]) : !1;
+  }, Zt = function(C) {
+    An(r.removed, {
+      element: C
+    });
+    try {
+      C.parentNode.removeChild(C);
+    } catch {
+      C.remove();
+    }
+  }, k0 = function(C, j) {
+    try {
+      An(r.removed, {
+        attribute: j.getAttributeNode(C),
+        from: j
+      });
+    } catch {
+      An(r.removed, {
+        attribute: null,
+        from: j
+      });
+    }
+    if (j.removeAttribute(C), C === "is" && !X[C])
+      if (b0 || L0)
+        try {
+          Zt(j);
+        } catch {
+        }
+      else
+        try {
+          j.setAttribute(C, "");
+        } catch {
+        }
+  }, Le = function(C) {
+    let j = null, le = null;
+    if (pn)
+      C = "<remove></remove>" + C;
+    else {
+      const E = Bl(C, /^[\r\n\t ]+/);
+      le = E && E[0];
+    }
+    _0 === "application/xhtml+xml" && u0 === qt && (C = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + C + "</body></html>");
+    const v = S ? S.createHTML(C) : C;
+    if (u0 === qt)
+      try {
+        j = new P().parseFromString(v, _0);
+      } catch {
+      }
+    if (!j || !j.documentElement) {
+      j = L.createDocument(u0, "template", null);
+      try {
+        j.documentElement.innerHTML = Ne ? M : v;
+      } catch {
+      }
+    }
+    const Oe = j.body || j.documentElement;
+    return C && le && Oe.insertBefore(s.createTextNode(le), Oe.childNodes[0] || null), u0 === qt ? te.call(j, Ot ? "html" : "body")[0] : Ot ? j.documentElement : Oe;
+  }, h = function(C) {
+    return z.call(
+      C.ownerDocument || C,
+      C,
+      // eslint-disable-next-line no-bitwise
+      y.SHOW_ELEMENT | y.SHOW_COMMENT | y.SHOW_TEXT | y.SHOW_PROCESSING_INSTRUCTION | y.SHOW_CDATA_SECTION,
+      null
+    );
+  }, d = function(C) {
+    return C instanceof T && (typeof C.nodeName != "string" || typeof C.textContent != "string" || typeof C.removeChild != "function" || !(C.attributes instanceof D) || typeof C.removeAttribute != "function" || typeof C.setAttribute != "function" || typeof C.namespaceURI != "string" || typeof C.insertBefore != "function" || typeof C.hasChildNodes != "function");
+  }, V = function(C) {
+    return typeof p == "function" && C instanceof p;
+  }, w = function(C, j, le) {
+    ce[C] && ar(ce[C], (v) => {
+      v.call(r, j, le, Yt);
+    });
+  }, A = function(C) {
+    let j = null;
+    if (w("beforeSanitizeElements", C, null), d(C))
+      return Zt(C), !0;
+    const le = Ge(C.nodeName);
+    if (w("uponSanitizeElement", C, {
+      tagName: le,
+      allowedTags: _e
+    }), C.hasChildNodes() && !V(C.firstElementChild) && _t(/<[/\w]/g, C.innerHTML) && _t(/<[/\w]/g, C.textContent) || C.nodeType === 7)
+      return Zt(C), !0;
+    if (!_e[le] || tt[le]) {
+      if (!tt[le] && re(le) && (he.tagNameCheck instanceof RegExp && _t(he.tagNameCheck, le) || he.tagNameCheck instanceof Function && he.tagNameCheck(le)))
+        return !1;
+      if (J0 && !jt[le]) {
+        const v = N(C) || C.parentNode, Oe = R(C) || C.childNodes;
+        if (Oe && v) {
+          const E = Oe.length;
+          for (let rt = E - 1; rt >= 0; --rt)
+            v.insertBefore(ee(Oe[rt], !0), Z(C));
+        }
+      }
+      return Zt(C), !0;
+    }
+    return C instanceof g && !Mr(C) || (le === "noscript" || le === "noembed" || le === "noframes") && _t(/<\/no(script|embed|frames)/i, C.innerHTML) ? (Zt(C), !0) : (pt && C.nodeType === 3 && (j = C.textContent, ar([oe, Ce, ke], (v) => {
+      j = Sn(j, v, " ");
+    }), C.textContent !== j && (An(r.removed, {
+      element: C.cloneNode()
+    }), C.textContent = j)), w("afterSanitizeElements", C, null), !1);
+  }, Re = function(C, j, le) {
+    if (w0 && (j === "id" || j === "name") && (le in s || le in Tr))
+      return !1;
+    if (!(a0 && !it[j] && _t(Pe, j))) {
+      if (!(l0 && _t(et, j))) {
+        if (!X[j] || it[j]) {
+          if (
+            // First condition does a very basic check if a) it's basically a valid custom element tagname AND
+            // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
+            // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
+            !(re(C) && (he.tagNameCheck instanceof RegExp && _t(he.tagNameCheck, C) || he.tagNameCheck instanceof Function && he.tagNameCheck(C)) && (he.attributeNameCheck instanceof RegExp && _t(he.attributeNameCheck, j) || he.attributeNameCheck instanceof Function && he.attributeNameCheck(j)) || // Alternative, second condition checks if it's an `is`-attribute, AND
+            // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
+            j === "is" && he.allowCustomizedBuiltInElements && (he.tagNameCheck instanceof RegExp && _t(he.tagNameCheck, le) || he.tagNameCheck instanceof Function && he.tagNameCheck(le)))
+          )
+            return !1;
+        } else if (!$0[j]) {
+          if (!_t(J, Sn(le, mt, ""))) {
+            if (!((j === "src" || j === "xlink:href" || j === "href") && C !== "script" && T4(le, "data:") === 0 && In[C])) {
+              if (!(I0 && !_t(vt, Sn(le, mt, "")))) {
+                if (le)
+                  return !1;
+              }
+            }
+          }
+        }
+      }
+    }
+    return !0;
+  }, re = function(C) {
+    return C !== "annotation-xml" && Bl(C, Be);
+  }, nt = function(C) {
+    w("beforeSanitizeAttributes", C, null);
+    const {
+      attributes: j
+    } = C;
+    if (!j)
+      return;
+    const le = {
+      attrName: "",
+      attrValue: "",
+      keepAttr: !0,
+      allowedAttributes: X
+    };
+    let v = j.length;
+    for (; v--; ) {
+      const Oe = j[v], {
+        name: E,
+        namespaceURI: rt,
+        value: Kt
+      } = Oe, D0 = Ge(E);
+      let Qe = E === "value" ? Kt : M4(Kt);
+      if (le.attrName = D0, le.attrValue = Qe, le.keepAttr = !0, le.forceKeepAttr = void 0, w("uponSanitizeAttribute", C, le), Qe = le.attrValue, le.forceKeepAttr || (k0(E, C), !le.keepAttr))
+        continue;
+      if (!g0 && _t(/\/>/i, Qe)) {
+        k0(E, C);
+        continue;
+      }
+      pt && ar([oe, Ce, ke], (tn) => {
+        Qe = Sn(Qe, tn, " ");
+      });
+      const fe = Ge(C.nodeName);
+      if (Re(fe, D0, Qe)) {
+        if (gt && (D0 === "id" || D0 === "name") && (k0(E, C), Qe = Q0 + Qe), S && typeof U == "object" && typeof U.getAttributeType == "function" && !rt)
+          switch (U.getAttributeType(fe, D0)) {
+            case "TrustedHTML": {
+              Qe = S.createHTML(Qe);
+              break;
+            }
+            case "TrustedScriptURL": {
+              Qe = S.createScriptURL(Qe);
+              break;
+            }
+          }
+        try {
+          rt ? C.setAttributeNS(rt, E, Qe) : C.setAttribute(E, Qe), zl(r.removed);
+        } catch {
+        }
+      }
+    }
+    w("afterSanitizeAttributes", C, null);
+  }, x0 = function G(C) {
+    let j = null;
+    const le = h(C);
+    for (w("beforeSanitizeShadowDOM", C, null); j = le.nextNode(); )
+      w("uponSanitizeShadowNode", j, null), !A(j) && (j.content instanceof u && G(j.content), nt(j));
+    w("afterSanitizeShadowDOM", C, null);
+  };
+  return r.sanitize = function(G) {
+    let C = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, j = null, le = null, v = null, Oe = null;
+    if (Ne = !G, Ne && (G = "<!-->"), typeof G != "string" && !V(G))
+      if (typeof G.toString == "function") {
+        if (G = G.toString(), typeof G != "string")
+          throw Fn("dirty is not a string, aborting");
+      } else
+        throw Fn("toString is not a function");
+    if (!r.isSupported)
+      return G;
+    if (o0 || st(C), r.removed = [], typeof G == "string" && (O0 = !1), O0) {
+      if (G.nodeName) {
+        const Kt = Ge(G.nodeName);
+        if (!_e[Kt] || tt[Kt])
+          throw Fn("root node is forbidden and cannot be sanitized in-place");
+      }
+    } else if (G instanceof p)
+      j = Le("<!---->"), le = j.ownerDocument.importNode(G, !0), le.nodeType === 1 && le.nodeName === "BODY" || le.nodeName === "HTML" ? j = le : j.appendChild(le);
+    else {
+      if (!b0 && !pt && !Ot && // eslint-disable-next-line unicorn/prefer-includes
+      G.indexOf("<") === -1)
+        return S && K0 ? S.createHTML(G) : G;
+      if (j = Le(G), !j)
+        return b0 ? null : K0 ? M : "";
+    }
+    j && pn && Zt(j.firstChild);
+    const E = h(O0 ? G : j);
+    for (; v = E.nextNode(); )
+      A(v) || (v.content instanceof u && x0(v.content), nt(v));
+    if (O0)
+      return G;
+    if (b0) {
+      if (L0)
+        for (Oe = H.call(j.ownerDocument); j.firstChild; )
+          Oe.appendChild(j.firstChild);
+      else
+        Oe = j;
+      return (X.shadowroot || X.shadowrootmode) && (Oe = Q.call(i, Oe, !0)), Oe;
+    }
+    let rt = Ot ? j.outerHTML : j.innerHTML;
+    return Ot && _e["!doctype"] && j.ownerDocument && j.ownerDocument.doctype && j.ownerDocument.doctype.name && _t(po, j.ownerDocument.doctype.name) && (rt = "<!DOCTYPE " + j.ownerDocument.doctype.name + `>
+` + rt), pt && ar([oe, Ce, ke], (Kt) => {
+      rt = Sn(rt, Kt, " ");
+    }), S && K0 ? S.createHTML(rt) : rt;
+  }, r.setConfig = function() {
+    let G = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
+    st(G), o0 = !0;
+  }, r.clearConfig = function() {
+    Yt = null, o0 = !1;
+  }, r.isValidAttribute = function(G, C, j) {
+    Yt || st({});
+    const le = Ge(G), v = Ge(C);
+    return Re(le, v, j);
+  }, r.addHook = function(G, C) {
+    typeof C == "function" && (ce[G] = ce[G] || [], An(ce[G], C));
+  }, r.removeHook = function(G) {
+    if (ce[G])
+      return zl(ce[G]);
+  }, r.removeHooks = function(G) {
+    ce[G] && (ce[G] = []);
+  }, r.removeAllHooks = function() {
+    ce = {};
+  }, r;
+}
+var ql = go(), yr = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
+function bo(a) {
+  return a && a.__esModule && Object.prototype.hasOwnProperty.call(a, "default") ? a.default : a;
+}
+var wo = { exports: {} }, As = { exports: {} }, Pl;
+function j4() {
+  return Pl || (Pl = 1, function(a, r) {
+    (function(i, o) {
+      a.exports = o();
+    })(typeof self < "u" ? self : yr, function() {
+      return (
+        /******/
+        function() {
+          var s = {};
+          (function() {
+            s.d = function(t, e) {
+              for (var n in e)
+                s.o(e, n) && !s.o(t, n) && Object.defineProperty(t, n, { enumerable: !0, get: e[n] });
+            };
+          })(), function() {
+            s.o = function(t, e) {
+              return Object.prototype.hasOwnProperty.call(t, e);
+            };
+          }();
+          var i = {};
+          s.d(i, {
+            default: function() {
+              return (
+                /* binding */
+                $u
+              );
+            }
+          });
+          class o {
+            // Error start position based on passed-in Token or ParseNode.
+            // Length of affected text based on passed-in Token or ParseNode.
+            // The underlying error message without any context added.
+            constructor(e, n) {
+              this.name = void 0, this.position = void 0, this.length = void 0, this.rawMessage = void 0;
+              let l = "KaTeX parse error: " + e, c, m;
+              const b = n && n.loc;
+              if (b && b.start <= b.end) {
+                const x = b.lexer.input;
+                c = b.start, m = b.end, c === x.length ? l += " at end of input: " : l += " at position " + (c + 1) + ": ";
+                const F = x.slice(c, m).replace(/[^]/g, "$&̲");
+                let B;
+                c > 15 ? B = "…" + x.slice(c - 15, c) : B = x.slice(0, c);
+                let I;
+                m + 15 < x.length ? I = x.slice(m, m + 15) + "…" : I = x.slice(m), l += B + F + I;
+              }
+              const _ = new Error(l);
+              return _.name = "ParseError", _.__proto__ = o.prototype, _.position = c, c != null && m != null && (_.length = m - c), _.rawMessage = e, _;
+            }
+          }
+          o.prototype.__proto__ = Error.prototype;
+          var u = o;
+          const f = function(t, e) {
+            return t.indexOf(e) !== -1;
+          }, p = function(t, e) {
+            return t === void 0 ? e : t;
+          }, g = /([A-Z])/g, y = function(t) {
+            return t.replace(g, "-$1").toLowerCase();
+          }, D = {
+            "&": "&amp;",
+            ">": "&gt;",
+            "<": "&lt;",
+            '"': "&quot;",
+            "'": "&#x27;"
+          }, T = /[&><"']/g;
+          function P(t) {
+            return String(t).replace(T, (e) => D[e]);
+          }
+          const U = function(t) {
+            return t.type === "ordgroup" || t.type === "color" ? t.body.length === 1 ? U(t.body[0]) : t : t.type === "font" ? U(t.body) : t;
+          }, K = function(t) {
+            const e = U(t);
+            return e.type === "mathord" || e.type === "textord" || e.type === "atom";
+          }, ee = function(t) {
+            if (!t)
+              throw new Error("Expected non-null, but got " + String(t));
+            return t;
+          };
+          var R = {
+            contains: f,
+            deflt: p,
+            escape: P,
+            hyphenate: y,
+            getBaseElem: U,
+            isCharacterBox: K,
+            protocolFromUrl: function(t) {
+              const e = /^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(t);
+              return e ? e[2] !== ":" || !/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(e[1]) ? null : e[1].toLowerCase() : "_relative";
+            }
+          };
+          const N = {
+            displayMode: {
+              type: "boolean",
+              description: "Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",
+              cli: "-d, --display-mode"
+            },
+            output: {
+              type: {
+                enum: ["htmlAndMathml", "html", "mathml"]
+              },
+              description: "Determines the markup language of the output.",
+              cli: "-F, --format <type>"
+            },
+            leqno: {
+              type: "boolean",
+              description: "Render display math in leqno style (left-justified tags)."
+            },
+            fleqn: {
+              type: "boolean",
+              description: "Render display math flush left."
+            },
+            throwOnError: {
+              type: "boolean",
+              default: !0,
+              cli: "-t, --no-throw-on-error",
+              cliDescription: "Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."
+            },
+            errorColor: {
+              type: "string",
+              default: "#cc0000",
+              cli: "-c, --error-color <color>",
+              cliDescription: "A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",
+              cliProcessor: (t) => "#" + t
+            },
+            macros: {
+              type: "object",
+              cli: "-m, --macro <def>",
+              cliDescription: "Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",
+              cliDefault: [],
+              cliProcessor: (t, e) => (e.push(t), e)
+            },
+            minRuleThickness: {
+              type: "number",
+              description: "Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",
+              processor: (t) => Math.max(0, t),
+              cli: "--min-rule-thickness <size>",
+              cliProcessor: parseFloat
+            },
+            colorIsTextColor: {
+              type: "boolean",
+              description: "Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",
+              cli: "-b, --color-is-text-color"
+            },
+            strict: {
+              type: [{
+                enum: ["warn", "ignore", "error"]
+              }, "boolean", "function"],
+              description: "Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",
+              cli: "-S, --strict",
+              cliDefault: !1
+            },
+            trust: {
+              type: ["boolean", "function"],
+              description: "Trust the input, enabling all HTML features such as \\url.",
+              cli: "-T, --trust"
+            },
+            maxSize: {
+              type: "number",
+              default: 1 / 0,
+              description: "If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",
+              processor: (t) => Math.max(0, t),
+              cli: "-s, --max-size <n>",
+              cliProcessor: parseInt
+            },
+            maxExpand: {
+              type: "number",
+              default: 1e3,
+              description: "Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",
+              processor: (t) => Math.max(0, t),
+              cli: "-e, --max-expand <n>",
+              cliProcessor: (t) => t === "Infinity" ? 1 / 0 : parseInt(t)
+            },
+            globalGroup: {
+              type: "boolean",
+              cli: !1
+            }
+          };
+          function S(t) {
+            if (t.default)
+              return t.default;
+            const e = t.type, n = Array.isArray(e) ? e[0] : e;
+            if (typeof n != "string")
+              return n.enum[0];
+            switch (n) {
+              case "boolean":
+                return !1;
+              case "string":
+                return "";
+              case "number":
+                return 0;
+              case "object":
+                return {};
+            }
+          }
+          class M {
+            constructor(e) {
+              this.displayMode = void 0, this.output = void 0, this.leqno = void 0, this.fleqn = void 0, this.throwOnError = void 0, this.errorColor = void 0, this.macros = void 0, this.minRuleThickness = void 0, this.colorIsTextColor = void 0, this.strict = void 0, this.trust = void 0, this.maxSize = void 0, this.maxExpand = void 0, this.globalGroup = void 0, e = e || {};
+              for (const n in N)
+                if (N.hasOwnProperty(n)) {
+                  const l = N[n];
+                  this[n] = e[n] !== void 0 ? l.processor ? l.processor(e[n]) : e[n] : S(l);
+                }
+            }
+            /**
+             * Report nonstrict (non-LaTeX-compatible) input.
+             * Can safely not be called if `this.strict` is false in JavaScript.
+             */
+            reportNonstrict(e, n, l) {
+              let c = this.strict;
+              if (typeof c == "function" && (c = c(e, n, l)), !(!c || c === "ignore")) {
+                if (c === !0 || c === "error")
+                  throw new u("LaTeX-incompatible input and strict mode is set to 'error': " + (n + " [" + e + "]"), l);
+                c === "warn" ? typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (n + " [" + e + "]")) : typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + c + "': " + n + " [" + e + "]"));
+              }
+            }
+            /**
+             * Check whether to apply strict (LaTeX-adhering) behavior for unusual
+             * input (like `\\`).  Unlike `nonstrict`, will not throw an error;
+             * instead, "error" translates to a return value of `true`, while "ignore"
+             * translates to a return value of `false`.  May still print a warning:
+             * "warn" prints a warning and returns `false`.
+             * This is for the second category of `errorCode`s listed in the README.
+             */
+            useStrictBehavior(e, n, l) {
+              let c = this.strict;
+              if (typeof c == "function")
+                try {
+                  c = c(e, n, l);
+                } catch {
+                  c = "error";
+                }
+              return !c || c === "ignore" ? !1 : c === !0 || c === "error" ? !0 : c === "warn" ? (typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to 'warn': " + (n + " [" + e + "]")), !1) : (typeof console < "u" && console.warn("LaTeX-incompatible input and strict mode is set to " + ("unrecognized '" + c + "': " + n + " [" + e + "]")), !1);
+            }
+            /**
+             * Check whether to test potentially dangerous input, and return
+             * `true` (trusted) or `false` (untrusted).  The sole argument `context`
+             * should be an object with `command` field specifying the relevant LaTeX
+             * command (as a string starting with `\`), and any other arguments, etc.
+             * If `context` has a `url` field, a `protocol` field will automatically
+             * get added by this function (changing the specified object).
+             */
+            isTrusted(e) {
+              if (e.url && !e.protocol) {
+                const l = R.protocolFromUrl(e.url);
+                if (l == null)
+                  return !1;
+                e.protocol = l;
+              }
+              return !!(typeof this.trust == "function" ? this.trust(e) : this.trust);
+            }
+          }
+          class L {
+            constructor(e, n, l) {
+              this.id = void 0, this.size = void 0, this.cramped = void 0, this.id = e, this.size = n, this.cramped = l;
+            }
+            /**
+             * Get the style of a superscript given a base in the current style.
+             */
+            sup() {
+              return Pe[et[this.id]];
+            }
+            /**
+             * Get the style of a subscript given a base in the current style.
+             */
+            sub() {
+              return Pe[vt[this.id]];
+            }
+            /**
+             * Get the style of a fraction numerator given the fraction in the current
+             * style.
+             */
+            fracNum() {
+              return Pe[mt[this.id]];
+            }
+            /**
+             * Get the style of a fraction denominator given the fraction in the current
+             * style.
+             */
+            fracDen() {
+              return Pe[Be[this.id]];
+            }
+            /**
+             * Get the cramped version of a style (in particular, cramping a cramped style
+             * doesn't change the style).
+             */
+            cramp() {
+              return Pe[J[this.id]];
+            }
+            /**
+             * Get a text or display version of this style.
+             */
+            text() {
+              return Pe[_e[this.id]];
+            }
+            /**
+             * Return true if this style is tightly spaced (scriptstyle/scriptscriptstyle)
+             */
+            isTight() {
+              return this.size >= 2;
+            }
+          }
+          const z = 0, H = 1, te = 2, Q = 3, ce = 4, oe = 5, Ce = 6, ke = 7, Pe = [new L(z, 0, !1), new L(H, 0, !0), new L(te, 1, !1), new L(Q, 1, !0), new L(ce, 2, !1), new L(oe, 2, !0), new L(Ce, 3, !1), new L(ke, 3, !0)], et = [ce, oe, ce, oe, Ce, ke, Ce, ke], vt = [oe, oe, oe, oe, ke, ke, ke, ke], mt = [te, Q, ce, oe, Ce, ke, Ce, ke], Be = [Q, Q, oe, oe, ke, ke, ke, ke], J = [H, H, Q, Q, oe, oe, ke, ke], _e = [z, H, te, Q, te, Q, te, Q];
+          var ae = {
+            DISPLAY: Pe[z],
+            TEXT: Pe[te],
+            SCRIPT: Pe[ce],
+            SCRIPTSCRIPT: Pe[Ce]
+          };
+          const X = [{
+            // Latin characters beyond the Latin-1 characters we have metrics for.
+            // Needed for Czech, Hungarian and Turkish text, for example.
+            name: "latin",
+            blocks: [
+              [256, 591],
+              // Latin Extended-A and Latin Extended-B
+              [768, 879]
+              // Combining Diacritical marks
+            ]
+          }, {
+            // The Cyrillic script used by Russian and related languages.
+            // A Cyrillic subset used to be supported as explicitly defined
+            // symbols in symbols.js
+            name: "cyrillic",
+            blocks: [[1024, 1279]]
+          }, {
+            // Armenian
+            name: "armenian",
+            blocks: [[1328, 1423]]
+          }, {
+            // The Brahmic scripts of South and Southeast Asia
+            // Devanagari (0900–097F)
+            // Bengali (0980–09FF)
+            // Gurmukhi (0A00–0A7F)
+            // Gujarati (0A80–0AFF)
+            // Oriya (0B00–0B7F)
+            // Tamil (0B80–0BFF)
+            // Telugu (0C00–0C7F)
+            // Kannada (0C80–0CFF)
+            // Malayalam (0D00–0D7F)
+            // Sinhala (0D80–0DFF)
+            // Thai (0E00–0E7F)
+            // Lao (0E80–0EFF)
+            // Tibetan (0F00–0FFF)
+            // Myanmar (1000–109F)
+            name: "brahmic",
+            blocks: [[2304, 4255]]
+          }, {
+            name: "georgian",
+            blocks: [[4256, 4351]]
+          }, {
+            // Chinese and Japanese.
+            // The "k" in cjk is for Korean, but we've separated Korean out
+            name: "cjk",
+            blocks: [
+              [12288, 12543],
+              // CJK symbols and punctuation, Hiragana, Katakana
+              [19968, 40879],
+              // CJK ideograms
+              [65280, 65376]
+              // Fullwidth punctuation
+              // TODO: add halfwidth Katakana and Romanji glyphs
+            ]
+          }, {
+            // Korean
+            name: "hangul",
+            blocks: [[44032, 55215]]
+          }];
+          function ie(t) {
+            for (let e = 0; e < X.length; e++) {
+              const n = X[e];
+              for (let l = 0; l < n.blocks.length; l++) {
+                const c = n.blocks[l];
+                if (t >= c[0] && t <= c[1])
+                  return n.name;
+              }
+            }
+            return null;
+          }
+          const he = [];
+          X.forEach((t) => t.blocks.forEach((e) => he.push(...e)));
+          function tt(t) {
+            for (let e = 0; e < he.length; e += 2)
+              if (t >= he[e] && t <= he[e + 1])
+                return !0;
+            return !1;
+          }
+          const it = 80, l0 = function(t, e) {
+            return "M95," + (622 + t + e) + `
+c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
+c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
+c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
+s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
+c69,-144,104.5,-217.7,106.5,-221
+l` + t / 2.075 + " -" + t + `
+c5.3,-9.3,12,-14,20,-14
+H400000v` + (40 + t) + `H845.2724
+s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
+c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
+M` + (834 + t) + " " + e + "h400000v" + (40 + t) + "h-400000z";
+          }, a0 = function(t, e) {
+            return "M263," + (601 + t + e) + `c0.7,0,18,39.7,52,119
+c34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120
+c340,-704.7,510.7,-1060.3,512,-1067
+l` + t / 2.084 + " -" + t + `
+c4.7,-7.3,11,-11,19,-11
+H40000v` + (40 + t) + `H1012.3
+s-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232
+c-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1
+s-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26
+c-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z
+M` + (1001 + t) + " " + e + "h400000v" + (40 + t) + "h-400000z";
+          }, I0 = function(t, e) {
+            return "M983 " + (10 + t + e) + `
+l` + t / 3.13 + " -" + t + `
+c4,-6.7,10,-10,18,-10 H400000v` + (40 + t) + `
+H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7
+s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744
+c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30
+c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722
+c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5
+c53.7,-170.3,84.5,-266.8,92.5,-289.5z
+M` + (1001 + t) + " " + e + "h400000v" + (40 + t) + "h-400000z";
+          }, g0 = function(t, e) {
+            return "M424," + (2398 + t + e) + `
+c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514
+c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20
+s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121
+s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081
+l` + t / 4.223 + " -" + t + `c4,-6.7,10,-10,18,-10 H400000
+v` + (40 + t) + `H1014.6
+s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185
+c-2,6,-10,9,-24,9
+c-8,0,-12,-0.7,-12,-2z M` + (1001 + t) + " " + e + `
+h400000v` + (40 + t) + "h-400000z";
+          }, pt = function(t, e) {
+            return "M473," + (2713 + t + e) + `
+c339.3,-1799.3,509.3,-2700,510,-2702 l` + t / 5.298 + " -" + t + `
+c3.3,-7.3,9.3,-11,18,-11 H400000v` + (40 + t) + `H1017.7
+s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
+c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
+c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
+s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
+606zM` + (1001 + t) + " " + e + "h400000v" + (40 + t) + "H1017.7z";
+          }, Ot = function(t) {
+            const e = t / 2;
+            return "M400000 " + t + " H0 L" + e + " 0 l65 45 L145 " + (t - 80) + " H400000z";
+          }, o0 = function(t, e, n) {
+            const l = n - 54 - e - t;
+            return "M702 " + (t + e) + "H400000" + (40 + t) + `
+H742v` + l + `l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1
+h-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170
+c-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667
+219 661 l218 661zM702 ` + e + "H400000v" + (40 + t) + "H742z";
+          }, pn = function(t, e, n) {
+            e = 1e3 * e;
+            let l = "";
+            switch (t) {
+              case "sqrtMain":
+                l = l0(e, it);
+                break;
+              case "sqrtSize1":
+                l = a0(e, it);
+                break;
+              case "sqrtSize2":
+                l = I0(e, it);
+                break;
+              case "sqrtSize3":
+                l = g0(e, it);
+                break;
+              case "sqrtSize4":
+                l = pt(e, it);
+                break;
+              case "sqrtTall":
+                l = o0(e, it, n);
+            }
+            return l;
+          }, b0 = function(t, e) {
+            switch (t) {
+              case "⎜":
+                return "M291 0 H417 V" + e + " H291z M291 0 H417 V" + e + " H291z";
+              case "∣":
+                return "M145 0 H188 V" + e + " H145z M145 0 H188 V" + e + " H145z";
+              case "∥":
+                return "M145 0 H188 V" + e + " H145z M145 0 H188 V" + e + " H145z" + ("M367 0 H410 V" + e + " H367z M367 0 H410 V" + e + " H367z");
+              case "⎟":
+                return "M457 0 H583 V" + e + " H457z M457 0 H583 V" + e + " H457z";
+              case "⎢":
+                return "M319 0 H403 V" + e + " H319z M319 0 H403 V" + e + " H319z";
+              case "⎥":
+                return "M263 0 H347 V" + e + " H263z M263 0 H347 V" + e + " H263z";
+              case "⎪":
+                return "M384 0 H504 V" + e + " H384z M384 0 H504 V" + e + " H384z";
+              case "⏐":
+                return "M312 0 H355 V" + e + " H312z M312 0 H355 V" + e + " H312z";
+              case "‖":
+                return "M257 0 H300 V" + e + " H257z M257 0 H300 V" + e + " H257z" + ("M478 0 H521 V" + e + " H478z M478 0 H521 V" + e + " H478z");
+              default:
+                return "";
+            }
+          }, L0 = {
+            // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main
+            doubleleftarrow: `M262 157
+l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3
+ 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28
+ 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5
+c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5
+ 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87
+-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7
+-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z
+m8 0v40h399730v-40zm0 194v40h399730v-40z`,
+            // doublerightarrow is from glyph U+21D2 in font KaTeX Main
+            doublerightarrow: `M399738 392l
+-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5
+ 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88
+-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68
+-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18
+-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782
+c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3
+-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,
+            // leftarrow is from glyph U+2190 in font KaTeX Main
+            leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120
+ 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8
+-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247
+c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208
+ 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3
+ 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202
+ l-3-3h399890zM100 241v40h399900v-40z`,
+            // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular
+            leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117
+-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7
+ 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,
+            leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
+ 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
+ 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
+-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,
+            // overgroup is from the MnSymbol package (public domain)
+            leftgroup: `M400000 80
+H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0
+ 435 0h399565z`,
+            leftgroupunder: `M400000 262
+H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219
+ 435 219h399565z`,
+            // Harpoons are from glyph U+21BD in font KaTeX Main
+            leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3
+-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5
+-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7
+-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,
+            leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5
+ 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3
+-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7
+-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z
+m0 0v40h400000v-40z`,
+            leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333
+ 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5
+ 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667
+-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,
+            leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12
+ 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7
+-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0
+v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,
+            // hook is from glyph U+21A9 in font KaTeX Main
+            lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5
+-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3
+-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21
+ 71.5 23h399859zM103 281v-40h399897v40z`,
+            leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z
+M40 281 V428 H0 V94 H40 V241 H400000 v40z`,
+            leftmapsto: `M40 281 V448H0V74H40V241H400000v40z
+M40 281 V448H0V74H40V241H400000v40z`,
+            // tofrom is from glyph U+21C4 in font KaTeX AMS Regular
+            leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23
+-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8
+c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3
+ 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,
+            longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z
+M0 50 h400000 v40H0z m0 194h40000v40H0z`,
+            midbrace: `M200428 334
+c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14
+-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7
+ 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11
+ 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,
+            midbraceunder: `M199572 214
+c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14
+ 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3
+ 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0
+-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,
+            oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6
+-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z
+m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8
+60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,
+            oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8
+-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z
+m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2
+c0 110 84 276 504 276s502.4-166 502.4-276z`,
+            oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6
+-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z
+m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0
+85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,
+            oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8
+-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z
+m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1
+c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,
+            rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128
+-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
+ 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
+ 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
+-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
+-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
+ 151.7 139 205zm0 0v40h399900v-40z`,
+            rightbrace: `M400000 542l
+-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5
+s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1
+c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,
+            rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3
+ 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237
+-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,
+            rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0
+ 3-1 3-3v-38c-76-158-257-219-435-219H0z`,
+            rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18
+ 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,
+            rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3
+-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2
+-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58
+ 69.2 92 94.5zm0 0v40h399900v-40z`,
+            rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11
+-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7
+ 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z
+m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,
+            rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8
+ 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5
+-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95
+-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,
+            rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8
+ 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3
+ 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3
+-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z
+m0-194v40h400000v-40zm0 0v40h400000v-40z`,
+            righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3
+ 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0
+-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21
+ 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,
+            rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z
+M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,
+            rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23
+ 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32
+-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142
+-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,
+            // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular
+            twoheadleftarrow: `M0 167c68 40
+ 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69
+-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3
+-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19
+-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101
+ 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,
+            twoheadrightarrow: `M400000 167
+c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3
+ 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42
+ 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333
+-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70
+ 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,
+            // tilde1 is a modified version of a glyph from the MnSymbol package
+            tilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7
+-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0
+ 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0
+ 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128
+-68.267.847-113-73.952-191-73.952z`,
+            // ditto tilde2, tilde3, & tilde4
+            tilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418
+-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9
+ 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114
+c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751
+ 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,
+            tilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457
+-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0
+ 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697
+ 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696
+ -338 0-409-156.573-744-156.573z`,
+            tilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345
+-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409
+ 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9
+ 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409
+ -175.236-744-175.236z`,
+            // vec is from glyph U+20D7 in font KaTeX Main
+            vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5
+3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11
+10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63
+-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1
+-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59
+H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359
+c-16-25.333-24-45-24-59z`,
+            // widehat1 is a modified version of a glyph from the MnSymbol package
+            widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22
+c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,
+            // ditto widehat2, widehat3, & widehat4
+            widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+            widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+            widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10
+-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,
+            // widecheck paths are all inverted versions of widehat
+            widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,
+-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,
+            widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+            widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+            widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,
+-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,
+            // The next ten paths support reaction arrows from the mhchem package.
+            // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX
+            // baraboveleftarrow is mostly from glyph U+2190 in font KaTeX Main
+            baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202
+c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5
+c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130
+s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47
+121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6
+s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11
+c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z
+M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,
+            // rightarrowabovebar is mostly from glyph U+2192, KaTeX Main
+            rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32
+-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0
+13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39
+-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5
+-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
+-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
+151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,
+            // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end.
+            // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em
+            baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
+c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17
+c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21
+c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40
+c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z
+M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,
+            rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0
+c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
+-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
+c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
+M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,
+            shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11
+c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,
+1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,
+-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z
+M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,
+            shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0
+c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,
+-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6
+c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z
+M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`
+          }, K0 = function(t, e) {
+            switch (t) {
+              case "lbrack":
+                return "M403 1759 V84 H666 V0 H319 V1759 v" + e + ` v1759 h347 v-84
+H403z M403 1759 V0 H319 V1759 v` + e + " v1759 h84z";
+              case "rbrack":
+                return "M347 1759 V0 H0 V84 H263 V1759 v" + e + ` v1759 H0 v84 H347z
+M347 1759 V0 H263 V1759 v` + e + " v1759 h84z";
+              case "vert":
+                return "M145 15 v585 v" + e + ` v585 c2.667,10,9.667,15,21,15
+c10,0,16.667,-5,20,-15 v-585 v` + -e + ` v-585 c-2.667,-10,-9.667,-15,-21,-15
+c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v` + e + " v585 h43z";
+              case "doublevert":
+                return "M145 15 v585 v" + e + ` v585 c2.667,10,9.667,15,21,15
+c10,0,16.667,-5,20,-15 v-585 v` + -e + ` v-585 c-2.667,-10,-9.667,-15,-21,-15
+c-10,0,-16.667,5,-20,15z M188 15 H145 v585 v` + e + ` v585 h43z
+M367 15 v585 v` + e + ` v585 c2.667,10,9.667,15,21,15
+c10,0,16.667,-5,20,-15 v-585 v` + -e + ` v-585 c-2.667,-10,-9.667,-15,-21,-15
+c-10,0,-16.667,5,-20,15z M410 15 H367 v585 v` + e + " v585 h43z";
+              case "lfloor":
+                return "M319 602 V0 H403 V602 v" + e + ` v1715 h263 v84 H319z
+MM319 602 V0 H403 V602 v` + e + " v1715 H319z";
+              case "rfloor":
+                return "M319 602 V0 H403 V602 v" + e + ` v1799 H0 v-84 H319z
+MM319 602 V0 H403 V602 v` + e + " v1715 H319z";
+              case "lceil":
+                return "M403 1759 V84 H666 V0 H319 V1759 v" + e + ` v602 h84z
+M403 1759 V0 H319 V1759 v` + e + " v602 h84z";
+              case "rceil":
+                return "M347 1759 V0 H0 V84 H263 V1759 v" + e + ` v602 h84z
+M347 1759 V0 h-84 V1759 v` + e + " v602 h84z";
+              case "lparen":
+                return `M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1
+c-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,
+-36,557 l0,` + (e + 84) + `c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,
+949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9
+c0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,
+-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189
+l0,-` + (e + 92) + `c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,
+-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z`;
+              case "rparen":
+                return `M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,
+63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5
+c11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,` + (e + 9) + `
+c-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664
+c-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11
+c0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17
+c242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558
+l0,-` + (e + 144) + `c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,
+-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z`;
+              default:
+                throw new Error("Unknown stretchy delimiter.");
+            }
+          };
+          class w0 {
+            // HtmlDomNode
+            // Never used; needed for satisfying interface.
+            constructor(e) {
+              this.children = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, this.children = e, this.classes = [], this.height = 0, this.depth = 0, this.maxFontSize = 0, this.style = {};
+            }
+            hasClass(e) {
+              return R.contains(this.classes, e);
+            }
+            /** Convert the fragment into a node. */
+            toNode() {
+              const e = document.createDocumentFragment();
+              for (let n = 0; n < this.children.length; n++)
+                e.appendChild(this.children[n].toNode());
+              return e;
+            }
+            /** Convert the fragment into HTML markup. */
+            toMarkup() {
+              let e = "";
+              for (let n = 0; n < this.children.length; n++)
+                e += this.children[n].toMarkup();
+              return e;
+            }
+            /**
+             * Converts the math node into a string, similar to innerText. Applies to
+             * MathDomNode's only.
+             */
+            toText() {
+              const e = (n) => n.toText();
+              return this.children.map(e).join("");
+            }
+          }
+          var gt = {
+            "AMS-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              65: [0, 0.68889, 0, 0, 0.72222],
+              66: [0, 0.68889, 0, 0, 0.66667],
+              67: [0, 0.68889, 0, 0, 0.72222],
+              68: [0, 0.68889, 0, 0, 0.72222],
+              69: [0, 0.68889, 0, 0, 0.66667],
+              70: [0, 0.68889, 0, 0, 0.61111],
+              71: [0, 0.68889, 0, 0, 0.77778],
+              72: [0, 0.68889, 0, 0, 0.77778],
+              73: [0, 0.68889, 0, 0, 0.38889],
+              74: [0.16667, 0.68889, 0, 0, 0.5],
+              75: [0, 0.68889, 0, 0, 0.77778],
+              76: [0, 0.68889, 0, 0, 0.66667],
+              77: [0, 0.68889, 0, 0, 0.94445],
+              78: [0, 0.68889, 0, 0, 0.72222],
+              79: [0.16667, 0.68889, 0, 0, 0.77778],
+              80: [0, 0.68889, 0, 0, 0.61111],
+              81: [0.16667, 0.68889, 0, 0, 0.77778],
+              82: [0, 0.68889, 0, 0, 0.72222],
+              83: [0, 0.68889, 0, 0, 0.55556],
+              84: [0, 0.68889, 0, 0, 0.66667],
+              85: [0, 0.68889, 0, 0, 0.72222],
+              86: [0, 0.68889, 0, 0, 0.72222],
+              87: [0, 0.68889, 0, 0, 1],
+              88: [0, 0.68889, 0, 0, 0.72222],
+              89: [0, 0.68889, 0, 0, 0.72222],
+              90: [0, 0.68889, 0, 0, 0.66667],
+              107: [0, 0.68889, 0, 0, 0.55556],
+              160: [0, 0, 0, 0, 0.25],
+              165: [0, 0.675, 0.025, 0, 0.75],
+              174: [0.15559, 0.69224, 0, 0, 0.94666],
+              240: [0, 0.68889, 0, 0, 0.55556],
+              295: [0, 0.68889, 0, 0, 0.54028],
+              710: [0, 0.825, 0, 0, 2.33334],
+              732: [0, 0.9, 0, 0, 2.33334],
+              770: [0, 0.825, 0, 0, 2.33334],
+              771: [0, 0.9, 0, 0, 2.33334],
+              989: [0.08167, 0.58167, 0, 0, 0.77778],
+              1008: [0, 0.43056, 0.04028, 0, 0.66667],
+              8245: [0, 0.54986, 0, 0, 0.275],
+              8463: [0, 0.68889, 0, 0, 0.54028],
+              8487: [0, 0.68889, 0, 0, 0.72222],
+              8498: [0, 0.68889, 0, 0, 0.55556],
+              8502: [0, 0.68889, 0, 0, 0.66667],
+              8503: [0, 0.68889, 0, 0, 0.44445],
+              8504: [0, 0.68889, 0, 0, 0.66667],
+              8513: [0, 0.68889, 0, 0, 0.63889],
+              8592: [-0.03598, 0.46402, 0, 0, 0.5],
+              8594: [-0.03598, 0.46402, 0, 0, 0.5],
+              8602: [-0.13313, 0.36687, 0, 0, 1],
+              8603: [-0.13313, 0.36687, 0, 0, 1],
+              8606: [0.01354, 0.52239, 0, 0, 1],
+              8608: [0.01354, 0.52239, 0, 0, 1],
+              8610: [0.01354, 0.52239, 0, 0, 1.11111],
+              8611: [0.01354, 0.52239, 0, 0, 1.11111],
+              8619: [0, 0.54986, 0, 0, 1],
+              8620: [0, 0.54986, 0, 0, 1],
+              8621: [-0.13313, 0.37788, 0, 0, 1.38889],
+              8622: [-0.13313, 0.36687, 0, 0, 1],
+              8624: [0, 0.69224, 0, 0, 0.5],
+              8625: [0, 0.69224, 0, 0, 0.5],
+              8630: [0, 0.43056, 0, 0, 1],
+              8631: [0, 0.43056, 0, 0, 1],
+              8634: [0.08198, 0.58198, 0, 0, 0.77778],
+              8635: [0.08198, 0.58198, 0, 0, 0.77778],
+              8638: [0.19444, 0.69224, 0, 0, 0.41667],
+              8639: [0.19444, 0.69224, 0, 0, 0.41667],
+              8642: [0.19444, 0.69224, 0, 0, 0.41667],
+              8643: [0.19444, 0.69224, 0, 0, 0.41667],
+              8644: [0.1808, 0.675, 0, 0, 1],
+              8646: [0.1808, 0.675, 0, 0, 1],
+              8647: [0.1808, 0.675, 0, 0, 1],
+              8648: [0.19444, 0.69224, 0, 0, 0.83334],
+              8649: [0.1808, 0.675, 0, 0, 1],
+              8650: [0.19444, 0.69224, 0, 0, 0.83334],
+              8651: [0.01354, 0.52239, 0, 0, 1],
+              8652: [0.01354, 0.52239, 0, 0, 1],
+              8653: [-0.13313, 0.36687, 0, 0, 1],
+              8654: [-0.13313, 0.36687, 0, 0, 1],
+              8655: [-0.13313, 0.36687, 0, 0, 1],
+              8666: [0.13667, 0.63667, 0, 0, 1],
+              8667: [0.13667, 0.63667, 0, 0, 1],
+              8669: [-0.13313, 0.37788, 0, 0, 1],
+              8672: [-0.064, 0.437, 0, 0, 1.334],
+              8674: [-0.064, 0.437, 0, 0, 1.334],
+              8705: [0, 0.825, 0, 0, 0.5],
+              8708: [0, 0.68889, 0, 0, 0.55556],
+              8709: [0.08167, 0.58167, 0, 0, 0.77778],
+              8717: [0, 0.43056, 0, 0, 0.42917],
+              8722: [-0.03598, 0.46402, 0, 0, 0.5],
+              8724: [0.08198, 0.69224, 0, 0, 0.77778],
+              8726: [0.08167, 0.58167, 0, 0, 0.77778],
+              8733: [0, 0.69224, 0, 0, 0.77778],
+              8736: [0, 0.69224, 0, 0, 0.72222],
+              8737: [0, 0.69224, 0, 0, 0.72222],
+              8738: [0.03517, 0.52239, 0, 0, 0.72222],
+              8739: [0.08167, 0.58167, 0, 0, 0.22222],
+              8740: [0.25142, 0.74111, 0, 0, 0.27778],
+              8741: [0.08167, 0.58167, 0, 0, 0.38889],
+              8742: [0.25142, 0.74111, 0, 0, 0.5],
+              8756: [0, 0.69224, 0, 0, 0.66667],
+              8757: [0, 0.69224, 0, 0, 0.66667],
+              8764: [-0.13313, 0.36687, 0, 0, 0.77778],
+              8765: [-0.13313, 0.37788, 0, 0, 0.77778],
+              8769: [-0.13313, 0.36687, 0, 0, 0.77778],
+              8770: [-0.03625, 0.46375, 0, 0, 0.77778],
+              8774: [0.30274, 0.79383, 0, 0, 0.77778],
+              8776: [-0.01688, 0.48312, 0, 0, 0.77778],
+              8778: [0.08167, 0.58167, 0, 0, 0.77778],
+              8782: [0.06062, 0.54986, 0, 0, 0.77778],
+              8783: [0.06062, 0.54986, 0, 0, 0.77778],
+              8785: [0.08198, 0.58198, 0, 0, 0.77778],
+              8786: [0.08198, 0.58198, 0, 0, 0.77778],
+              8787: [0.08198, 0.58198, 0, 0, 0.77778],
+              8790: [0, 0.69224, 0, 0, 0.77778],
+              8791: [0.22958, 0.72958, 0, 0, 0.77778],
+              8796: [0.08198, 0.91667, 0, 0, 0.77778],
+              8806: [0.25583, 0.75583, 0, 0, 0.77778],
+              8807: [0.25583, 0.75583, 0, 0, 0.77778],
+              8808: [0.25142, 0.75726, 0, 0, 0.77778],
+              8809: [0.25142, 0.75726, 0, 0, 0.77778],
+              8812: [0.25583, 0.75583, 0, 0, 0.5],
+              8814: [0.20576, 0.70576, 0, 0, 0.77778],
+              8815: [0.20576, 0.70576, 0, 0, 0.77778],
+              8816: [0.30274, 0.79383, 0, 0, 0.77778],
+              8817: [0.30274, 0.79383, 0, 0, 0.77778],
+              8818: [0.22958, 0.72958, 0, 0, 0.77778],
+              8819: [0.22958, 0.72958, 0, 0, 0.77778],
+              8822: [0.1808, 0.675, 0, 0, 0.77778],
+              8823: [0.1808, 0.675, 0, 0, 0.77778],
+              8828: [0.13667, 0.63667, 0, 0, 0.77778],
+              8829: [0.13667, 0.63667, 0, 0, 0.77778],
+              8830: [0.22958, 0.72958, 0, 0, 0.77778],
+              8831: [0.22958, 0.72958, 0, 0, 0.77778],
+              8832: [0.20576, 0.70576, 0, 0, 0.77778],
+              8833: [0.20576, 0.70576, 0, 0, 0.77778],
+              8840: [0.30274, 0.79383, 0, 0, 0.77778],
+              8841: [0.30274, 0.79383, 0, 0, 0.77778],
+              8842: [0.13597, 0.63597, 0, 0, 0.77778],
+              8843: [0.13597, 0.63597, 0, 0, 0.77778],
+              8847: [0.03517, 0.54986, 0, 0, 0.77778],
+              8848: [0.03517, 0.54986, 0, 0, 0.77778],
+              8858: [0.08198, 0.58198, 0, 0, 0.77778],
+              8859: [0.08198, 0.58198, 0, 0, 0.77778],
+              8861: [0.08198, 0.58198, 0, 0, 0.77778],
+              8862: [0, 0.675, 0, 0, 0.77778],
+              8863: [0, 0.675, 0, 0, 0.77778],
+              8864: [0, 0.675, 0, 0, 0.77778],
+              8865: [0, 0.675, 0, 0, 0.77778],
+              8872: [0, 0.69224, 0, 0, 0.61111],
+              8873: [0, 0.69224, 0, 0, 0.72222],
+              8874: [0, 0.69224, 0, 0, 0.88889],
+              8876: [0, 0.68889, 0, 0, 0.61111],
+              8877: [0, 0.68889, 0, 0, 0.61111],
+              8878: [0, 0.68889, 0, 0, 0.72222],
+              8879: [0, 0.68889, 0, 0, 0.72222],
+              8882: [0.03517, 0.54986, 0, 0, 0.77778],
+              8883: [0.03517, 0.54986, 0, 0, 0.77778],
+              8884: [0.13667, 0.63667, 0, 0, 0.77778],
+              8885: [0.13667, 0.63667, 0, 0, 0.77778],
+              8888: [0, 0.54986, 0, 0, 1.11111],
+              8890: [0.19444, 0.43056, 0, 0, 0.55556],
+              8891: [0.19444, 0.69224, 0, 0, 0.61111],
+              8892: [0.19444, 0.69224, 0, 0, 0.61111],
+              8901: [0, 0.54986, 0, 0, 0.27778],
+              8903: [0.08167, 0.58167, 0, 0, 0.77778],
+              8905: [0.08167, 0.58167, 0, 0, 0.77778],
+              8906: [0.08167, 0.58167, 0, 0, 0.77778],
+              8907: [0, 0.69224, 0, 0, 0.77778],
+              8908: [0, 0.69224, 0, 0, 0.77778],
+              8909: [-0.03598, 0.46402, 0, 0, 0.77778],
+              8910: [0, 0.54986, 0, 0, 0.76042],
+              8911: [0, 0.54986, 0, 0, 0.76042],
+              8912: [0.03517, 0.54986, 0, 0, 0.77778],
+              8913: [0.03517, 0.54986, 0, 0, 0.77778],
+              8914: [0, 0.54986, 0, 0, 0.66667],
+              8915: [0, 0.54986, 0, 0, 0.66667],
+              8916: [0, 0.69224, 0, 0, 0.66667],
+              8918: [0.0391, 0.5391, 0, 0, 0.77778],
+              8919: [0.0391, 0.5391, 0, 0, 0.77778],
+              8920: [0.03517, 0.54986, 0, 0, 1.33334],
+              8921: [0.03517, 0.54986, 0, 0, 1.33334],
+              8922: [0.38569, 0.88569, 0, 0, 0.77778],
+              8923: [0.38569, 0.88569, 0, 0, 0.77778],
+              8926: [0.13667, 0.63667, 0, 0, 0.77778],
+              8927: [0.13667, 0.63667, 0, 0, 0.77778],
+              8928: [0.30274, 0.79383, 0, 0, 0.77778],
+              8929: [0.30274, 0.79383, 0, 0, 0.77778],
+              8934: [0.23222, 0.74111, 0, 0, 0.77778],
+              8935: [0.23222, 0.74111, 0, 0, 0.77778],
+              8936: [0.23222, 0.74111, 0, 0, 0.77778],
+              8937: [0.23222, 0.74111, 0, 0, 0.77778],
+              8938: [0.20576, 0.70576, 0, 0, 0.77778],
+              8939: [0.20576, 0.70576, 0, 0, 0.77778],
+              8940: [0.30274, 0.79383, 0, 0, 0.77778],
+              8941: [0.30274, 0.79383, 0, 0, 0.77778],
+              8994: [0.19444, 0.69224, 0, 0, 0.77778],
+              8995: [0.19444, 0.69224, 0, 0, 0.77778],
+              9416: [0.15559, 0.69224, 0, 0, 0.90222],
+              9484: [0, 0.69224, 0, 0, 0.5],
+              9488: [0, 0.69224, 0, 0, 0.5],
+              9492: [0, 0.37788, 0, 0, 0.5],
+              9496: [0, 0.37788, 0, 0, 0.5],
+              9585: [0.19444, 0.68889, 0, 0, 0.88889],
+              9586: [0.19444, 0.74111, 0, 0, 0.88889],
+              9632: [0, 0.675, 0, 0, 0.77778],
+              9633: [0, 0.675, 0, 0, 0.77778],
+              9650: [0, 0.54986, 0, 0, 0.72222],
+              9651: [0, 0.54986, 0, 0, 0.72222],
+              9654: [0.03517, 0.54986, 0, 0, 0.77778],
+              9660: [0, 0.54986, 0, 0, 0.72222],
+              9661: [0, 0.54986, 0, 0, 0.72222],
+              9664: [0.03517, 0.54986, 0, 0, 0.77778],
+              9674: [0.11111, 0.69224, 0, 0, 0.66667],
+              9733: [0.19444, 0.69224, 0, 0, 0.94445],
+              10003: [0, 0.69224, 0, 0, 0.83334],
+              10016: [0, 0.69224, 0, 0, 0.83334],
+              10731: [0.11111, 0.69224, 0, 0, 0.66667],
+              10846: [0.19444, 0.75583, 0, 0, 0.61111],
+              10877: [0.13667, 0.63667, 0, 0, 0.77778],
+              10878: [0.13667, 0.63667, 0, 0, 0.77778],
+              10885: [0.25583, 0.75583, 0, 0, 0.77778],
+              10886: [0.25583, 0.75583, 0, 0, 0.77778],
+              10887: [0.13597, 0.63597, 0, 0, 0.77778],
+              10888: [0.13597, 0.63597, 0, 0, 0.77778],
+              10889: [0.26167, 0.75726, 0, 0, 0.77778],
+              10890: [0.26167, 0.75726, 0, 0, 0.77778],
+              10891: [0.48256, 0.98256, 0, 0, 0.77778],
+              10892: [0.48256, 0.98256, 0, 0, 0.77778],
+              10901: [0.13667, 0.63667, 0, 0, 0.77778],
+              10902: [0.13667, 0.63667, 0, 0, 0.77778],
+              10933: [0.25142, 0.75726, 0, 0, 0.77778],
+              10934: [0.25142, 0.75726, 0, 0, 0.77778],
+              10935: [0.26167, 0.75726, 0, 0, 0.77778],
+              10936: [0.26167, 0.75726, 0, 0, 0.77778],
+              10937: [0.26167, 0.75726, 0, 0, 0.77778],
+              10938: [0.26167, 0.75726, 0, 0, 0.77778],
+              10949: [0.25583, 0.75583, 0, 0, 0.77778],
+              10950: [0.25583, 0.75583, 0, 0, 0.77778],
+              10955: [0.28481, 0.79383, 0, 0, 0.77778],
+              10956: [0.28481, 0.79383, 0, 0, 0.77778],
+              57350: [0.08167, 0.58167, 0, 0, 0.22222],
+              57351: [0.08167, 0.58167, 0, 0, 0.38889],
+              57352: [0.08167, 0.58167, 0, 0, 0.77778],
+              57353: [0, 0.43056, 0.04028, 0, 0.66667],
+              57356: [0.25142, 0.75726, 0, 0, 0.77778],
+              57357: [0.25142, 0.75726, 0, 0, 0.77778],
+              57358: [0.41951, 0.91951, 0, 0, 0.77778],
+              57359: [0.30274, 0.79383, 0, 0, 0.77778],
+              57360: [0.30274, 0.79383, 0, 0, 0.77778],
+              57361: [0.41951, 0.91951, 0, 0, 0.77778],
+              57366: [0.25142, 0.75726, 0, 0, 0.77778],
+              57367: [0.25142, 0.75726, 0, 0, 0.77778],
+              57368: [0.25142, 0.75726, 0, 0, 0.77778],
+              57369: [0.25142, 0.75726, 0, 0, 0.77778],
+              57370: [0.13597, 0.63597, 0, 0, 0.77778],
+              57371: [0.13597, 0.63597, 0, 0, 0.77778]
+            },
+            "Caligraphic-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              65: [0, 0.68333, 0, 0.19445, 0.79847],
+              66: [0, 0.68333, 0.03041, 0.13889, 0.65681],
+              67: [0, 0.68333, 0.05834, 0.13889, 0.52653],
+              68: [0, 0.68333, 0.02778, 0.08334, 0.77139],
+              69: [0, 0.68333, 0.08944, 0.11111, 0.52778],
+              70: [0, 0.68333, 0.09931, 0.11111, 0.71875],
+              71: [0.09722, 0.68333, 0.0593, 0.11111, 0.59487],
+              72: [0, 0.68333, 965e-5, 0.11111, 0.84452],
+              73: [0, 0.68333, 0.07382, 0, 0.54452],
+              74: [0.09722, 0.68333, 0.18472, 0.16667, 0.67778],
+              75: [0, 0.68333, 0.01445, 0.05556, 0.76195],
+              76: [0, 0.68333, 0, 0.13889, 0.68972],
+              77: [0, 0.68333, 0, 0.13889, 1.2009],
+              78: [0, 0.68333, 0.14736, 0.08334, 0.82049],
+              79: [0, 0.68333, 0.02778, 0.11111, 0.79611],
+              80: [0, 0.68333, 0.08222, 0.08334, 0.69556],
+              81: [0.09722, 0.68333, 0, 0.11111, 0.81667],
+              82: [0, 0.68333, 0, 0.08334, 0.8475],
+              83: [0, 0.68333, 0.075, 0.13889, 0.60556],
+              84: [0, 0.68333, 0.25417, 0, 0.54464],
+              85: [0, 0.68333, 0.09931, 0.08334, 0.62583],
+              86: [0, 0.68333, 0.08222, 0, 0.61278],
+              87: [0, 0.68333, 0.08222, 0.08334, 0.98778],
+              88: [0, 0.68333, 0.14643, 0.13889, 0.7133],
+              89: [0.09722, 0.68333, 0.08222, 0.08334, 0.66834],
+              90: [0, 0.68333, 0.07944, 0.13889, 0.72473],
+              160: [0, 0, 0, 0, 0.25]
+            },
+            "Fraktur-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69141, 0, 0, 0.29574],
+              34: [0, 0.69141, 0, 0, 0.21471],
+              38: [0, 0.69141, 0, 0, 0.73786],
+              39: [0, 0.69141, 0, 0, 0.21201],
+              40: [0.24982, 0.74947, 0, 0, 0.38865],
+              41: [0.24982, 0.74947, 0, 0, 0.38865],
+              42: [0, 0.62119, 0, 0, 0.27764],
+              43: [0.08319, 0.58283, 0, 0, 0.75623],
+              44: [0, 0.10803, 0, 0, 0.27764],
+              45: [0.08319, 0.58283, 0, 0, 0.75623],
+              46: [0, 0.10803, 0, 0, 0.27764],
+              47: [0.24982, 0.74947, 0, 0, 0.50181],
+              48: [0, 0.47534, 0, 0, 0.50181],
+              49: [0, 0.47534, 0, 0, 0.50181],
+              50: [0, 0.47534, 0, 0, 0.50181],
+              51: [0.18906, 0.47534, 0, 0, 0.50181],
+              52: [0.18906, 0.47534, 0, 0, 0.50181],
+              53: [0.18906, 0.47534, 0, 0, 0.50181],
+              54: [0, 0.69141, 0, 0, 0.50181],
+              55: [0.18906, 0.47534, 0, 0, 0.50181],
+              56: [0, 0.69141, 0, 0, 0.50181],
+              57: [0.18906, 0.47534, 0, 0, 0.50181],
+              58: [0, 0.47534, 0, 0, 0.21606],
+              59: [0.12604, 0.47534, 0, 0, 0.21606],
+              61: [-0.13099, 0.36866, 0, 0, 0.75623],
+              63: [0, 0.69141, 0, 0, 0.36245],
+              65: [0, 0.69141, 0, 0, 0.7176],
+              66: [0, 0.69141, 0, 0, 0.88397],
+              67: [0, 0.69141, 0, 0, 0.61254],
+              68: [0, 0.69141, 0, 0, 0.83158],
+              69: [0, 0.69141, 0, 0, 0.66278],
+              70: [0.12604, 0.69141, 0, 0, 0.61119],
+              71: [0, 0.69141, 0, 0, 0.78539],
+              72: [0.06302, 0.69141, 0, 0, 0.7203],
+              73: [0, 0.69141, 0, 0, 0.55448],
+              74: [0.12604, 0.69141, 0, 0, 0.55231],
+              75: [0, 0.69141, 0, 0, 0.66845],
+              76: [0, 0.69141, 0, 0, 0.66602],
+              77: [0, 0.69141, 0, 0, 1.04953],
+              78: [0, 0.69141, 0, 0, 0.83212],
+              79: [0, 0.69141, 0, 0, 0.82699],
+              80: [0.18906, 0.69141, 0, 0, 0.82753],
+              81: [0.03781, 0.69141, 0, 0, 0.82699],
+              82: [0, 0.69141, 0, 0, 0.82807],
+              83: [0, 0.69141, 0, 0, 0.82861],
+              84: [0, 0.69141, 0, 0, 0.66899],
+              85: [0, 0.69141, 0, 0, 0.64576],
+              86: [0, 0.69141, 0, 0, 0.83131],
+              87: [0, 0.69141, 0, 0, 1.04602],
+              88: [0, 0.69141, 0, 0, 0.71922],
+              89: [0.18906, 0.69141, 0, 0, 0.83293],
+              90: [0.12604, 0.69141, 0, 0, 0.60201],
+              91: [0.24982, 0.74947, 0, 0, 0.27764],
+              93: [0.24982, 0.74947, 0, 0, 0.27764],
+              94: [0, 0.69141, 0, 0, 0.49965],
+              97: [0, 0.47534, 0, 0, 0.50046],
+              98: [0, 0.69141, 0, 0, 0.51315],
+              99: [0, 0.47534, 0, 0, 0.38946],
+              100: [0, 0.62119, 0, 0, 0.49857],
+              101: [0, 0.47534, 0, 0, 0.40053],
+              102: [0.18906, 0.69141, 0, 0, 0.32626],
+              103: [0.18906, 0.47534, 0, 0, 0.5037],
+              104: [0.18906, 0.69141, 0, 0, 0.52126],
+              105: [0, 0.69141, 0, 0, 0.27899],
+              106: [0, 0.69141, 0, 0, 0.28088],
+              107: [0, 0.69141, 0, 0, 0.38946],
+              108: [0, 0.69141, 0, 0, 0.27953],
+              109: [0, 0.47534, 0, 0, 0.76676],
+              110: [0, 0.47534, 0, 0, 0.52666],
+              111: [0, 0.47534, 0, 0, 0.48885],
+              112: [0.18906, 0.52396, 0, 0, 0.50046],
+              113: [0.18906, 0.47534, 0, 0, 0.48912],
+              114: [0, 0.47534, 0, 0, 0.38919],
+              115: [0, 0.47534, 0, 0, 0.44266],
+              116: [0, 0.62119, 0, 0, 0.33301],
+              117: [0, 0.47534, 0, 0, 0.5172],
+              118: [0, 0.52396, 0, 0, 0.5118],
+              119: [0, 0.52396, 0, 0, 0.77351],
+              120: [0.18906, 0.47534, 0, 0, 0.38865],
+              121: [0.18906, 0.47534, 0, 0, 0.49884],
+              122: [0.18906, 0.47534, 0, 0, 0.39054],
+              160: [0, 0, 0, 0, 0.25],
+              8216: [0, 0.69141, 0, 0, 0.21471],
+              8217: [0, 0.69141, 0, 0, 0.21471],
+              58112: [0, 0.62119, 0, 0, 0.49749],
+              58113: [0, 0.62119, 0, 0, 0.4983],
+              58114: [0.18906, 0.69141, 0, 0, 0.33328],
+              58115: [0.18906, 0.69141, 0, 0, 0.32923],
+              58116: [0.18906, 0.47534, 0, 0, 0.50343],
+              58117: [0, 0.69141, 0, 0, 0.33301],
+              58118: [0, 0.62119, 0, 0, 0.33409],
+              58119: [0, 0.47534, 0, 0, 0.50073]
+            },
+            "Main-Bold": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0, 0, 0.35],
+              34: [0, 0.69444, 0, 0, 0.60278],
+              35: [0.19444, 0.69444, 0, 0, 0.95833],
+              36: [0.05556, 0.75, 0, 0, 0.575],
+              37: [0.05556, 0.75, 0, 0, 0.95833],
+              38: [0, 0.69444, 0, 0, 0.89444],
+              39: [0, 0.69444, 0, 0, 0.31944],
+              40: [0.25, 0.75, 0, 0, 0.44722],
+              41: [0.25, 0.75, 0, 0, 0.44722],
+              42: [0, 0.75, 0, 0, 0.575],
+              43: [0.13333, 0.63333, 0, 0, 0.89444],
+              44: [0.19444, 0.15556, 0, 0, 0.31944],
+              45: [0, 0.44444, 0, 0, 0.38333],
+              46: [0, 0.15556, 0, 0, 0.31944],
+              47: [0.25, 0.75, 0, 0, 0.575],
+              48: [0, 0.64444, 0, 0, 0.575],
+              49: [0, 0.64444, 0, 0, 0.575],
+              50: [0, 0.64444, 0, 0, 0.575],
+              51: [0, 0.64444, 0, 0, 0.575],
+              52: [0, 0.64444, 0, 0, 0.575],
+              53: [0, 0.64444, 0, 0, 0.575],
+              54: [0, 0.64444, 0, 0, 0.575],
+              55: [0, 0.64444, 0, 0, 0.575],
+              56: [0, 0.64444, 0, 0, 0.575],
+              57: [0, 0.64444, 0, 0, 0.575],
+              58: [0, 0.44444, 0, 0, 0.31944],
+              59: [0.19444, 0.44444, 0, 0, 0.31944],
+              60: [0.08556, 0.58556, 0, 0, 0.89444],
+              61: [-0.10889, 0.39111, 0, 0, 0.89444],
+              62: [0.08556, 0.58556, 0, 0, 0.89444],
+              63: [0, 0.69444, 0, 0, 0.54305],
+              64: [0, 0.69444, 0, 0, 0.89444],
+              65: [0, 0.68611, 0, 0, 0.86944],
+              66: [0, 0.68611, 0, 0, 0.81805],
+              67: [0, 0.68611, 0, 0, 0.83055],
+              68: [0, 0.68611, 0, 0, 0.88194],
+              69: [0, 0.68611, 0, 0, 0.75555],
+              70: [0, 0.68611, 0, 0, 0.72361],
+              71: [0, 0.68611, 0, 0, 0.90416],
+              72: [0, 0.68611, 0, 0, 0.9],
+              73: [0, 0.68611, 0, 0, 0.43611],
+              74: [0, 0.68611, 0, 0, 0.59444],
+              75: [0, 0.68611, 0, 0, 0.90138],
+              76: [0, 0.68611, 0, 0, 0.69166],
+              77: [0, 0.68611, 0, 0, 1.09166],
+              78: [0, 0.68611, 0, 0, 0.9],
+              79: [0, 0.68611, 0, 0, 0.86388],
+              80: [0, 0.68611, 0, 0, 0.78611],
+              81: [0.19444, 0.68611, 0, 0, 0.86388],
+              82: [0, 0.68611, 0, 0, 0.8625],
+              83: [0, 0.68611, 0, 0, 0.63889],
+              84: [0, 0.68611, 0, 0, 0.8],
+              85: [0, 0.68611, 0, 0, 0.88472],
+              86: [0, 0.68611, 0.01597, 0, 0.86944],
+              87: [0, 0.68611, 0.01597, 0, 1.18888],
+              88: [0, 0.68611, 0, 0, 0.86944],
+              89: [0, 0.68611, 0.02875, 0, 0.86944],
+              90: [0, 0.68611, 0, 0, 0.70277],
+              91: [0.25, 0.75, 0, 0, 0.31944],
+              92: [0.25, 0.75, 0, 0, 0.575],
+              93: [0.25, 0.75, 0, 0, 0.31944],
+              94: [0, 0.69444, 0, 0, 0.575],
+              95: [0.31, 0.13444, 0.03194, 0, 0.575],
+              97: [0, 0.44444, 0, 0, 0.55902],
+              98: [0, 0.69444, 0, 0, 0.63889],
+              99: [0, 0.44444, 0, 0, 0.51111],
+              100: [0, 0.69444, 0, 0, 0.63889],
+              101: [0, 0.44444, 0, 0, 0.52708],
+              102: [0, 0.69444, 0.10903, 0, 0.35139],
+              103: [0.19444, 0.44444, 0.01597, 0, 0.575],
+              104: [0, 0.69444, 0, 0, 0.63889],
+              105: [0, 0.69444, 0, 0, 0.31944],
+              106: [0.19444, 0.69444, 0, 0, 0.35139],
+              107: [0, 0.69444, 0, 0, 0.60694],
+              108: [0, 0.69444, 0, 0, 0.31944],
+              109: [0, 0.44444, 0, 0, 0.95833],
+              110: [0, 0.44444, 0, 0, 0.63889],
+              111: [0, 0.44444, 0, 0, 0.575],
+              112: [0.19444, 0.44444, 0, 0, 0.63889],
+              113: [0.19444, 0.44444, 0, 0, 0.60694],
+              114: [0, 0.44444, 0, 0, 0.47361],
+              115: [0, 0.44444, 0, 0, 0.45361],
+              116: [0, 0.63492, 0, 0, 0.44722],
+              117: [0, 0.44444, 0, 0, 0.63889],
+              118: [0, 0.44444, 0.01597, 0, 0.60694],
+              119: [0, 0.44444, 0.01597, 0, 0.83055],
+              120: [0, 0.44444, 0, 0, 0.60694],
+              121: [0.19444, 0.44444, 0.01597, 0, 0.60694],
+              122: [0, 0.44444, 0, 0, 0.51111],
+              123: [0.25, 0.75, 0, 0, 0.575],
+              124: [0.25, 0.75, 0, 0, 0.31944],
+              125: [0.25, 0.75, 0, 0, 0.575],
+              126: [0.35, 0.34444, 0, 0, 0.575],
+              160: [0, 0, 0, 0, 0.25],
+              163: [0, 0.69444, 0, 0, 0.86853],
+              168: [0, 0.69444, 0, 0, 0.575],
+              172: [0, 0.44444, 0, 0, 0.76666],
+              176: [0, 0.69444, 0, 0, 0.86944],
+              177: [0.13333, 0.63333, 0, 0, 0.89444],
+              184: [0.17014, 0, 0, 0, 0.51111],
+              198: [0, 0.68611, 0, 0, 1.04166],
+              215: [0.13333, 0.63333, 0, 0, 0.89444],
+              216: [0.04861, 0.73472, 0, 0, 0.89444],
+              223: [0, 0.69444, 0, 0, 0.59722],
+              230: [0, 0.44444, 0, 0, 0.83055],
+              247: [0.13333, 0.63333, 0, 0, 0.89444],
+              248: [0.09722, 0.54167, 0, 0, 0.575],
+              305: [0, 0.44444, 0, 0, 0.31944],
+              338: [0, 0.68611, 0, 0, 1.16944],
+              339: [0, 0.44444, 0, 0, 0.89444],
+              567: [0.19444, 0.44444, 0, 0, 0.35139],
+              710: [0, 0.69444, 0, 0, 0.575],
+              711: [0, 0.63194, 0, 0, 0.575],
+              713: [0, 0.59611, 0, 0, 0.575],
+              714: [0, 0.69444, 0, 0, 0.575],
+              715: [0, 0.69444, 0, 0, 0.575],
+              728: [0, 0.69444, 0, 0, 0.575],
+              729: [0, 0.69444, 0, 0, 0.31944],
+              730: [0, 0.69444, 0, 0, 0.86944],
+              732: [0, 0.69444, 0, 0, 0.575],
+              733: [0, 0.69444, 0, 0, 0.575],
+              915: [0, 0.68611, 0, 0, 0.69166],
+              916: [0, 0.68611, 0, 0, 0.95833],
+              920: [0, 0.68611, 0, 0, 0.89444],
+              923: [0, 0.68611, 0, 0, 0.80555],
+              926: [0, 0.68611, 0, 0, 0.76666],
+              928: [0, 0.68611, 0, 0, 0.9],
+              931: [0, 0.68611, 0, 0, 0.83055],
+              933: [0, 0.68611, 0, 0, 0.89444],
+              934: [0, 0.68611, 0, 0, 0.83055],
+              936: [0, 0.68611, 0, 0, 0.89444],
+              937: [0, 0.68611, 0, 0, 0.83055],
+              8211: [0, 0.44444, 0.03194, 0, 0.575],
+              8212: [0, 0.44444, 0.03194, 0, 1.14999],
+              8216: [0, 0.69444, 0, 0, 0.31944],
+              8217: [0, 0.69444, 0, 0, 0.31944],
+              8220: [0, 0.69444, 0, 0, 0.60278],
+              8221: [0, 0.69444, 0, 0, 0.60278],
+              8224: [0.19444, 0.69444, 0, 0, 0.51111],
+              8225: [0.19444, 0.69444, 0, 0, 0.51111],
+              8242: [0, 0.55556, 0, 0, 0.34444],
+              8407: [0, 0.72444, 0.15486, 0, 0.575],
+              8463: [0, 0.69444, 0, 0, 0.66759],
+              8465: [0, 0.69444, 0, 0, 0.83055],
+              8467: [0, 0.69444, 0, 0, 0.47361],
+              8472: [0.19444, 0.44444, 0, 0, 0.74027],
+              8476: [0, 0.69444, 0, 0, 0.83055],
+              8501: [0, 0.69444, 0, 0, 0.70277],
+              8592: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8593: [0.19444, 0.69444, 0, 0, 0.575],
+              8594: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8595: [0.19444, 0.69444, 0, 0, 0.575],
+              8596: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8597: [0.25, 0.75, 0, 0, 0.575],
+              8598: [0.19444, 0.69444, 0, 0, 1.14999],
+              8599: [0.19444, 0.69444, 0, 0, 1.14999],
+              8600: [0.19444, 0.69444, 0, 0, 1.14999],
+              8601: [0.19444, 0.69444, 0, 0, 1.14999],
+              8636: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8637: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8640: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8641: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8656: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8657: [0.19444, 0.69444, 0, 0, 0.70277],
+              8658: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8659: [0.19444, 0.69444, 0, 0, 0.70277],
+              8660: [-0.10889, 0.39111, 0, 0, 1.14999],
+              8661: [0.25, 0.75, 0, 0, 0.70277],
+              8704: [0, 0.69444, 0, 0, 0.63889],
+              8706: [0, 0.69444, 0.06389, 0, 0.62847],
+              8707: [0, 0.69444, 0, 0, 0.63889],
+              8709: [0.05556, 0.75, 0, 0, 0.575],
+              8711: [0, 0.68611, 0, 0, 0.95833],
+              8712: [0.08556, 0.58556, 0, 0, 0.76666],
+              8715: [0.08556, 0.58556, 0, 0, 0.76666],
+              8722: [0.13333, 0.63333, 0, 0, 0.89444],
+              8723: [0.13333, 0.63333, 0, 0, 0.89444],
+              8725: [0.25, 0.75, 0, 0, 0.575],
+              8726: [0.25, 0.75, 0, 0, 0.575],
+              8727: [-0.02778, 0.47222, 0, 0, 0.575],
+              8728: [-0.02639, 0.47361, 0, 0, 0.575],
+              8729: [-0.02639, 0.47361, 0, 0, 0.575],
+              8730: [0.18, 0.82, 0, 0, 0.95833],
+              8733: [0, 0.44444, 0, 0, 0.89444],
+              8734: [0, 0.44444, 0, 0, 1.14999],
+              8736: [0, 0.69224, 0, 0, 0.72222],
+              8739: [0.25, 0.75, 0, 0, 0.31944],
+              8741: [0.25, 0.75, 0, 0, 0.575],
+              8743: [0, 0.55556, 0, 0, 0.76666],
+              8744: [0, 0.55556, 0, 0, 0.76666],
+              8745: [0, 0.55556, 0, 0, 0.76666],
+              8746: [0, 0.55556, 0, 0, 0.76666],
+              8747: [0.19444, 0.69444, 0.12778, 0, 0.56875],
+              8764: [-0.10889, 0.39111, 0, 0, 0.89444],
+              8768: [0.19444, 0.69444, 0, 0, 0.31944],
+              8771: [222e-5, 0.50222, 0, 0, 0.89444],
+              8773: [0.027, 0.638, 0, 0, 0.894],
+              8776: [0.02444, 0.52444, 0, 0, 0.89444],
+              8781: [222e-5, 0.50222, 0, 0, 0.89444],
+              8801: [222e-5, 0.50222, 0, 0, 0.89444],
+              8804: [0.19667, 0.69667, 0, 0, 0.89444],
+              8805: [0.19667, 0.69667, 0, 0, 0.89444],
+              8810: [0.08556, 0.58556, 0, 0, 1.14999],
+              8811: [0.08556, 0.58556, 0, 0, 1.14999],
+              8826: [0.08556, 0.58556, 0, 0, 0.89444],
+              8827: [0.08556, 0.58556, 0, 0, 0.89444],
+              8834: [0.08556, 0.58556, 0, 0, 0.89444],
+              8835: [0.08556, 0.58556, 0, 0, 0.89444],
+              8838: [0.19667, 0.69667, 0, 0, 0.89444],
+              8839: [0.19667, 0.69667, 0, 0, 0.89444],
+              8846: [0, 0.55556, 0, 0, 0.76666],
+              8849: [0.19667, 0.69667, 0, 0, 0.89444],
+              8850: [0.19667, 0.69667, 0, 0, 0.89444],
+              8851: [0, 0.55556, 0, 0, 0.76666],
+              8852: [0, 0.55556, 0, 0, 0.76666],
+              8853: [0.13333, 0.63333, 0, 0, 0.89444],
+              8854: [0.13333, 0.63333, 0, 0, 0.89444],
+              8855: [0.13333, 0.63333, 0, 0, 0.89444],
+              8856: [0.13333, 0.63333, 0, 0, 0.89444],
+              8857: [0.13333, 0.63333, 0, 0, 0.89444],
+              8866: [0, 0.69444, 0, 0, 0.70277],
+              8867: [0, 0.69444, 0, 0, 0.70277],
+              8868: [0, 0.69444, 0, 0, 0.89444],
+              8869: [0, 0.69444, 0, 0, 0.89444],
+              8900: [-0.02639, 0.47361, 0, 0, 0.575],
+              8901: [-0.02639, 0.47361, 0, 0, 0.31944],
+              8902: [-0.02778, 0.47222, 0, 0, 0.575],
+              8968: [0.25, 0.75, 0, 0, 0.51111],
+              8969: [0.25, 0.75, 0, 0, 0.51111],
+              8970: [0.25, 0.75, 0, 0, 0.51111],
+              8971: [0.25, 0.75, 0, 0, 0.51111],
+              8994: [-0.13889, 0.36111, 0, 0, 1.14999],
+              8995: [-0.13889, 0.36111, 0, 0, 1.14999],
+              9651: [0.19444, 0.69444, 0, 0, 1.02222],
+              9657: [-0.02778, 0.47222, 0, 0, 0.575],
+              9661: [0.19444, 0.69444, 0, 0, 1.02222],
+              9667: [-0.02778, 0.47222, 0, 0, 0.575],
+              9711: [0.19444, 0.69444, 0, 0, 1.14999],
+              9824: [0.12963, 0.69444, 0, 0, 0.89444],
+              9825: [0.12963, 0.69444, 0, 0, 0.89444],
+              9826: [0.12963, 0.69444, 0, 0, 0.89444],
+              9827: [0.12963, 0.69444, 0, 0, 0.89444],
+              9837: [0, 0.75, 0, 0, 0.44722],
+              9838: [0.19444, 0.69444, 0, 0, 0.44722],
+              9839: [0.19444, 0.69444, 0, 0, 0.44722],
+              10216: [0.25, 0.75, 0, 0, 0.44722],
+              10217: [0.25, 0.75, 0, 0, 0.44722],
+              10815: [0, 0.68611, 0, 0, 0.9],
+              10927: [0.19667, 0.69667, 0, 0, 0.89444],
+              10928: [0.19667, 0.69667, 0, 0, 0.89444],
+              57376: [0.19444, 0.69444, 0, 0, 0]
+            },
+            "Main-BoldItalic": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0.11417, 0, 0.38611],
+              34: [0, 0.69444, 0.07939, 0, 0.62055],
+              35: [0.19444, 0.69444, 0.06833, 0, 0.94444],
+              37: [0.05556, 0.75, 0.12861, 0, 0.94444],
+              38: [0, 0.69444, 0.08528, 0, 0.88555],
+              39: [0, 0.69444, 0.12945, 0, 0.35555],
+              40: [0.25, 0.75, 0.15806, 0, 0.47333],
+              41: [0.25, 0.75, 0.03306, 0, 0.47333],
+              42: [0, 0.75, 0.14333, 0, 0.59111],
+              43: [0.10333, 0.60333, 0.03306, 0, 0.88555],
+              44: [0.19444, 0.14722, 0, 0, 0.35555],
+              45: [0, 0.44444, 0.02611, 0, 0.41444],
+              46: [0, 0.14722, 0, 0, 0.35555],
+              47: [0.25, 0.75, 0.15806, 0, 0.59111],
+              48: [0, 0.64444, 0.13167, 0, 0.59111],
+              49: [0, 0.64444, 0.13167, 0, 0.59111],
+              50: [0, 0.64444, 0.13167, 0, 0.59111],
+              51: [0, 0.64444, 0.13167, 0, 0.59111],
+              52: [0.19444, 0.64444, 0.13167, 0, 0.59111],
+              53: [0, 0.64444, 0.13167, 0, 0.59111],
+              54: [0, 0.64444, 0.13167, 0, 0.59111],
+              55: [0.19444, 0.64444, 0.13167, 0, 0.59111],
+              56: [0, 0.64444, 0.13167, 0, 0.59111],
+              57: [0, 0.64444, 0.13167, 0, 0.59111],
+              58: [0, 0.44444, 0.06695, 0, 0.35555],
+              59: [0.19444, 0.44444, 0.06695, 0, 0.35555],
+              61: [-0.10889, 0.39111, 0.06833, 0, 0.88555],
+              63: [0, 0.69444, 0.11472, 0, 0.59111],
+              64: [0, 0.69444, 0.09208, 0, 0.88555],
+              65: [0, 0.68611, 0, 0, 0.86555],
+              66: [0, 0.68611, 0.0992, 0, 0.81666],
+              67: [0, 0.68611, 0.14208, 0, 0.82666],
+              68: [0, 0.68611, 0.09062, 0, 0.87555],
+              69: [0, 0.68611, 0.11431, 0, 0.75666],
+              70: [0, 0.68611, 0.12903, 0, 0.72722],
+              71: [0, 0.68611, 0.07347, 0, 0.89527],
+              72: [0, 0.68611, 0.17208, 0, 0.8961],
+              73: [0, 0.68611, 0.15681, 0, 0.47166],
+              74: [0, 0.68611, 0.145, 0, 0.61055],
+              75: [0, 0.68611, 0.14208, 0, 0.89499],
+              76: [0, 0.68611, 0, 0, 0.69777],
+              77: [0, 0.68611, 0.17208, 0, 1.07277],
+              78: [0, 0.68611, 0.17208, 0, 0.8961],
+              79: [0, 0.68611, 0.09062, 0, 0.85499],
+              80: [0, 0.68611, 0.0992, 0, 0.78721],
+              81: [0.19444, 0.68611, 0.09062, 0, 0.85499],
+              82: [0, 0.68611, 0.02559, 0, 0.85944],
+              83: [0, 0.68611, 0.11264, 0, 0.64999],
+              84: [0, 0.68611, 0.12903, 0, 0.7961],
+              85: [0, 0.68611, 0.17208, 0, 0.88083],
+              86: [0, 0.68611, 0.18625, 0, 0.86555],
+              87: [0, 0.68611, 0.18625, 0, 1.15999],
+              88: [0, 0.68611, 0.15681, 0, 0.86555],
+              89: [0, 0.68611, 0.19803, 0, 0.86555],
+              90: [0, 0.68611, 0.14208, 0, 0.70888],
+              91: [0.25, 0.75, 0.1875, 0, 0.35611],
+              93: [0.25, 0.75, 0.09972, 0, 0.35611],
+              94: [0, 0.69444, 0.06709, 0, 0.59111],
+              95: [0.31, 0.13444, 0.09811, 0, 0.59111],
+              97: [0, 0.44444, 0.09426, 0, 0.59111],
+              98: [0, 0.69444, 0.07861, 0, 0.53222],
+              99: [0, 0.44444, 0.05222, 0, 0.53222],
+              100: [0, 0.69444, 0.10861, 0, 0.59111],
+              101: [0, 0.44444, 0.085, 0, 0.53222],
+              102: [0.19444, 0.69444, 0.21778, 0, 0.4],
+              103: [0.19444, 0.44444, 0.105, 0, 0.53222],
+              104: [0, 0.69444, 0.09426, 0, 0.59111],
+              105: [0, 0.69326, 0.11387, 0, 0.35555],
+              106: [0.19444, 0.69326, 0.1672, 0, 0.35555],
+              107: [0, 0.69444, 0.11111, 0, 0.53222],
+              108: [0, 0.69444, 0.10861, 0, 0.29666],
+              109: [0, 0.44444, 0.09426, 0, 0.94444],
+              110: [0, 0.44444, 0.09426, 0, 0.64999],
+              111: [0, 0.44444, 0.07861, 0, 0.59111],
+              112: [0.19444, 0.44444, 0.07861, 0, 0.59111],
+              113: [0.19444, 0.44444, 0.105, 0, 0.53222],
+              114: [0, 0.44444, 0.11111, 0, 0.50167],
+              115: [0, 0.44444, 0.08167, 0, 0.48694],
+              116: [0, 0.63492, 0.09639, 0, 0.385],
+              117: [0, 0.44444, 0.09426, 0, 0.62055],
+              118: [0, 0.44444, 0.11111, 0, 0.53222],
+              119: [0, 0.44444, 0.11111, 0, 0.76777],
+              120: [0, 0.44444, 0.12583, 0, 0.56055],
+              121: [0.19444, 0.44444, 0.105, 0, 0.56166],
+              122: [0, 0.44444, 0.13889, 0, 0.49055],
+              126: [0.35, 0.34444, 0.11472, 0, 0.59111],
+              160: [0, 0, 0, 0, 0.25],
+              168: [0, 0.69444, 0.11473, 0, 0.59111],
+              176: [0, 0.69444, 0, 0, 0.94888],
+              184: [0.17014, 0, 0, 0, 0.53222],
+              198: [0, 0.68611, 0.11431, 0, 1.02277],
+              216: [0.04861, 0.73472, 0.09062, 0, 0.88555],
+              223: [0.19444, 0.69444, 0.09736, 0, 0.665],
+              230: [0, 0.44444, 0.085, 0, 0.82666],
+              248: [0.09722, 0.54167, 0.09458, 0, 0.59111],
+              305: [0, 0.44444, 0.09426, 0, 0.35555],
+              338: [0, 0.68611, 0.11431, 0, 1.14054],
+              339: [0, 0.44444, 0.085, 0, 0.82666],
+              567: [0.19444, 0.44444, 0.04611, 0, 0.385],
+              710: [0, 0.69444, 0.06709, 0, 0.59111],
+              711: [0, 0.63194, 0.08271, 0, 0.59111],
+              713: [0, 0.59444, 0.10444, 0, 0.59111],
+              714: [0, 0.69444, 0.08528, 0, 0.59111],
+              715: [0, 0.69444, 0, 0, 0.59111],
+              728: [0, 0.69444, 0.10333, 0, 0.59111],
+              729: [0, 0.69444, 0.12945, 0, 0.35555],
+              730: [0, 0.69444, 0, 0, 0.94888],
+              732: [0, 0.69444, 0.11472, 0, 0.59111],
+              733: [0, 0.69444, 0.11472, 0, 0.59111],
+              915: [0, 0.68611, 0.12903, 0, 0.69777],
+              916: [0, 0.68611, 0, 0, 0.94444],
+              920: [0, 0.68611, 0.09062, 0, 0.88555],
+              923: [0, 0.68611, 0, 0, 0.80666],
+              926: [0, 0.68611, 0.15092, 0, 0.76777],
+              928: [0, 0.68611, 0.17208, 0, 0.8961],
+              931: [0, 0.68611, 0.11431, 0, 0.82666],
+              933: [0, 0.68611, 0.10778, 0, 0.88555],
+              934: [0, 0.68611, 0.05632, 0, 0.82666],
+              936: [0, 0.68611, 0.10778, 0, 0.88555],
+              937: [0, 0.68611, 0.0992, 0, 0.82666],
+              8211: [0, 0.44444, 0.09811, 0, 0.59111],
+              8212: [0, 0.44444, 0.09811, 0, 1.18221],
+              8216: [0, 0.69444, 0.12945, 0, 0.35555],
+              8217: [0, 0.69444, 0.12945, 0, 0.35555],
+              8220: [0, 0.69444, 0.16772, 0, 0.62055],
+              8221: [0, 0.69444, 0.07939, 0, 0.62055]
+            },
+            "Main-Italic": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0.12417, 0, 0.30667],
+              34: [0, 0.69444, 0.06961, 0, 0.51444],
+              35: [0.19444, 0.69444, 0.06616, 0, 0.81777],
+              37: [0.05556, 0.75, 0.13639, 0, 0.81777],
+              38: [0, 0.69444, 0.09694, 0, 0.76666],
+              39: [0, 0.69444, 0.12417, 0, 0.30667],
+              40: [0.25, 0.75, 0.16194, 0, 0.40889],
+              41: [0.25, 0.75, 0.03694, 0, 0.40889],
+              42: [0, 0.75, 0.14917, 0, 0.51111],
+              43: [0.05667, 0.56167, 0.03694, 0, 0.76666],
+              44: [0.19444, 0.10556, 0, 0, 0.30667],
+              45: [0, 0.43056, 0.02826, 0, 0.35778],
+              46: [0, 0.10556, 0, 0, 0.30667],
+              47: [0.25, 0.75, 0.16194, 0, 0.51111],
+              48: [0, 0.64444, 0.13556, 0, 0.51111],
+              49: [0, 0.64444, 0.13556, 0, 0.51111],
+              50: [0, 0.64444, 0.13556, 0, 0.51111],
+              51: [0, 0.64444, 0.13556, 0, 0.51111],
+              52: [0.19444, 0.64444, 0.13556, 0, 0.51111],
+              53: [0, 0.64444, 0.13556, 0, 0.51111],
+              54: [0, 0.64444, 0.13556, 0, 0.51111],
+              55: [0.19444, 0.64444, 0.13556, 0, 0.51111],
+              56: [0, 0.64444, 0.13556, 0, 0.51111],
+              57: [0, 0.64444, 0.13556, 0, 0.51111],
+              58: [0, 0.43056, 0.0582, 0, 0.30667],
+              59: [0.19444, 0.43056, 0.0582, 0, 0.30667],
+              61: [-0.13313, 0.36687, 0.06616, 0, 0.76666],
+              63: [0, 0.69444, 0.1225, 0, 0.51111],
+              64: [0, 0.69444, 0.09597, 0, 0.76666],
+              65: [0, 0.68333, 0, 0, 0.74333],
+              66: [0, 0.68333, 0.10257, 0, 0.70389],
+              67: [0, 0.68333, 0.14528, 0, 0.71555],
+              68: [0, 0.68333, 0.09403, 0, 0.755],
+              69: [0, 0.68333, 0.12028, 0, 0.67833],
+              70: [0, 0.68333, 0.13305, 0, 0.65277],
+              71: [0, 0.68333, 0.08722, 0, 0.77361],
+              72: [0, 0.68333, 0.16389, 0, 0.74333],
+              73: [0, 0.68333, 0.15806, 0, 0.38555],
+              74: [0, 0.68333, 0.14028, 0, 0.525],
+              75: [0, 0.68333, 0.14528, 0, 0.76888],
+              76: [0, 0.68333, 0, 0, 0.62722],
+              77: [0, 0.68333, 0.16389, 0, 0.89666],
+              78: [0, 0.68333, 0.16389, 0, 0.74333],
+              79: [0, 0.68333, 0.09403, 0, 0.76666],
+              80: [0, 0.68333, 0.10257, 0, 0.67833],
+              81: [0.19444, 0.68333, 0.09403, 0, 0.76666],
+              82: [0, 0.68333, 0.03868, 0, 0.72944],
+              83: [0, 0.68333, 0.11972, 0, 0.56222],
+              84: [0, 0.68333, 0.13305, 0, 0.71555],
+              85: [0, 0.68333, 0.16389, 0, 0.74333],
+              86: [0, 0.68333, 0.18361, 0, 0.74333],
+              87: [0, 0.68333, 0.18361, 0, 0.99888],
+              88: [0, 0.68333, 0.15806, 0, 0.74333],
+              89: [0, 0.68333, 0.19383, 0, 0.74333],
+              90: [0, 0.68333, 0.14528, 0, 0.61333],
+              91: [0.25, 0.75, 0.1875, 0, 0.30667],
+              93: [0.25, 0.75, 0.10528, 0, 0.30667],
+              94: [0, 0.69444, 0.06646, 0, 0.51111],
+              95: [0.31, 0.12056, 0.09208, 0, 0.51111],
+              97: [0, 0.43056, 0.07671, 0, 0.51111],
+              98: [0, 0.69444, 0.06312, 0, 0.46],
+              99: [0, 0.43056, 0.05653, 0, 0.46],
+              100: [0, 0.69444, 0.10333, 0, 0.51111],
+              101: [0, 0.43056, 0.07514, 0, 0.46],
+              102: [0.19444, 0.69444, 0.21194, 0, 0.30667],
+              103: [0.19444, 0.43056, 0.08847, 0, 0.46],
+              104: [0, 0.69444, 0.07671, 0, 0.51111],
+              105: [0, 0.65536, 0.1019, 0, 0.30667],
+              106: [0.19444, 0.65536, 0.14467, 0, 0.30667],
+              107: [0, 0.69444, 0.10764, 0, 0.46],
+              108: [0, 0.69444, 0.10333, 0, 0.25555],
+              109: [0, 0.43056, 0.07671, 0, 0.81777],
+              110: [0, 0.43056, 0.07671, 0, 0.56222],
+              111: [0, 0.43056, 0.06312, 0, 0.51111],
+              112: [0.19444, 0.43056, 0.06312, 0, 0.51111],
+              113: [0.19444, 0.43056, 0.08847, 0, 0.46],
+              114: [0, 0.43056, 0.10764, 0, 0.42166],
+              115: [0, 0.43056, 0.08208, 0, 0.40889],
+              116: [0, 0.61508, 0.09486, 0, 0.33222],
+              117: [0, 0.43056, 0.07671, 0, 0.53666],
+              118: [0, 0.43056, 0.10764, 0, 0.46],
+              119: [0, 0.43056, 0.10764, 0, 0.66444],
+              120: [0, 0.43056, 0.12042, 0, 0.46389],
+              121: [0.19444, 0.43056, 0.08847, 0, 0.48555],
+              122: [0, 0.43056, 0.12292, 0, 0.40889],
+              126: [0.35, 0.31786, 0.11585, 0, 0.51111],
+              160: [0, 0, 0, 0, 0.25],
+              168: [0, 0.66786, 0.10474, 0, 0.51111],
+              176: [0, 0.69444, 0, 0, 0.83129],
+              184: [0.17014, 0, 0, 0, 0.46],
+              198: [0, 0.68333, 0.12028, 0, 0.88277],
+              216: [0.04861, 0.73194, 0.09403, 0, 0.76666],
+              223: [0.19444, 0.69444, 0.10514, 0, 0.53666],
+              230: [0, 0.43056, 0.07514, 0, 0.71555],
+              248: [0.09722, 0.52778, 0.09194, 0, 0.51111],
+              338: [0, 0.68333, 0.12028, 0, 0.98499],
+              339: [0, 0.43056, 0.07514, 0, 0.71555],
+              710: [0, 0.69444, 0.06646, 0, 0.51111],
+              711: [0, 0.62847, 0.08295, 0, 0.51111],
+              713: [0, 0.56167, 0.10333, 0, 0.51111],
+              714: [0, 0.69444, 0.09694, 0, 0.51111],
+              715: [0, 0.69444, 0, 0, 0.51111],
+              728: [0, 0.69444, 0.10806, 0, 0.51111],
+              729: [0, 0.66786, 0.11752, 0, 0.30667],
+              730: [0, 0.69444, 0, 0, 0.83129],
+              732: [0, 0.66786, 0.11585, 0, 0.51111],
+              733: [0, 0.69444, 0.1225, 0, 0.51111],
+              915: [0, 0.68333, 0.13305, 0, 0.62722],
+              916: [0, 0.68333, 0, 0, 0.81777],
+              920: [0, 0.68333, 0.09403, 0, 0.76666],
+              923: [0, 0.68333, 0, 0, 0.69222],
+              926: [0, 0.68333, 0.15294, 0, 0.66444],
+              928: [0, 0.68333, 0.16389, 0, 0.74333],
+              931: [0, 0.68333, 0.12028, 0, 0.71555],
+              933: [0, 0.68333, 0.11111, 0, 0.76666],
+              934: [0, 0.68333, 0.05986, 0, 0.71555],
+              936: [0, 0.68333, 0.11111, 0, 0.76666],
+              937: [0, 0.68333, 0.10257, 0, 0.71555],
+              8211: [0, 0.43056, 0.09208, 0, 0.51111],
+              8212: [0, 0.43056, 0.09208, 0, 1.02222],
+              8216: [0, 0.69444, 0.12417, 0, 0.30667],
+              8217: [0, 0.69444, 0.12417, 0, 0.30667],
+              8220: [0, 0.69444, 0.1685, 0, 0.51444],
+              8221: [0, 0.69444, 0.06961, 0, 0.51444],
+              8463: [0, 0.68889, 0, 0, 0.54028]
+            },
+            "Main-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0, 0, 0.27778],
+              34: [0, 0.69444, 0, 0, 0.5],
+              35: [0.19444, 0.69444, 0, 0, 0.83334],
+              36: [0.05556, 0.75, 0, 0, 0.5],
+              37: [0.05556, 0.75, 0, 0, 0.83334],
+              38: [0, 0.69444, 0, 0, 0.77778],
+              39: [0, 0.69444, 0, 0, 0.27778],
+              40: [0.25, 0.75, 0, 0, 0.38889],
+              41: [0.25, 0.75, 0, 0, 0.38889],
+              42: [0, 0.75, 0, 0, 0.5],
+              43: [0.08333, 0.58333, 0, 0, 0.77778],
+              44: [0.19444, 0.10556, 0, 0, 0.27778],
+              45: [0, 0.43056, 0, 0, 0.33333],
+              46: [0, 0.10556, 0, 0, 0.27778],
+              47: [0.25, 0.75, 0, 0, 0.5],
+              48: [0, 0.64444, 0, 0, 0.5],
+              49: [0, 0.64444, 0, 0, 0.5],
+              50: [0, 0.64444, 0, 0, 0.5],
+              51: [0, 0.64444, 0, 0, 0.5],
+              52: [0, 0.64444, 0, 0, 0.5],
+              53: [0, 0.64444, 0, 0, 0.5],
+              54: [0, 0.64444, 0, 0, 0.5],
+              55: [0, 0.64444, 0, 0, 0.5],
+              56: [0, 0.64444, 0, 0, 0.5],
+              57: [0, 0.64444, 0, 0, 0.5],
+              58: [0, 0.43056, 0, 0, 0.27778],
+              59: [0.19444, 0.43056, 0, 0, 0.27778],
+              60: [0.0391, 0.5391, 0, 0, 0.77778],
+              61: [-0.13313, 0.36687, 0, 0, 0.77778],
+              62: [0.0391, 0.5391, 0, 0, 0.77778],
+              63: [0, 0.69444, 0, 0, 0.47222],
+              64: [0, 0.69444, 0, 0, 0.77778],
+              65: [0, 0.68333, 0, 0, 0.75],
+              66: [0, 0.68333, 0, 0, 0.70834],
+              67: [0, 0.68333, 0, 0, 0.72222],
+              68: [0, 0.68333, 0, 0, 0.76389],
+              69: [0, 0.68333, 0, 0, 0.68056],
+              70: [0, 0.68333, 0, 0, 0.65278],
+              71: [0, 0.68333, 0, 0, 0.78472],
+              72: [0, 0.68333, 0, 0, 0.75],
+              73: [0, 0.68333, 0, 0, 0.36111],
+              74: [0, 0.68333, 0, 0, 0.51389],
+              75: [0, 0.68333, 0, 0, 0.77778],
+              76: [0, 0.68333, 0, 0, 0.625],
+              77: [0, 0.68333, 0, 0, 0.91667],
+              78: [0, 0.68333, 0, 0, 0.75],
+              79: [0, 0.68333, 0, 0, 0.77778],
+              80: [0, 0.68333, 0, 0, 0.68056],
+              81: [0.19444, 0.68333, 0, 0, 0.77778],
+              82: [0, 0.68333, 0, 0, 0.73611],
+              83: [0, 0.68333, 0, 0, 0.55556],
+              84: [0, 0.68333, 0, 0, 0.72222],
+              85: [0, 0.68333, 0, 0, 0.75],
+              86: [0, 0.68333, 0.01389, 0, 0.75],
+              87: [0, 0.68333, 0.01389, 0, 1.02778],
+              88: [0, 0.68333, 0, 0, 0.75],
+              89: [0, 0.68333, 0.025, 0, 0.75],
+              90: [0, 0.68333, 0, 0, 0.61111],
+              91: [0.25, 0.75, 0, 0, 0.27778],
+              92: [0.25, 0.75, 0, 0, 0.5],
+              93: [0.25, 0.75, 0, 0, 0.27778],
+              94: [0, 0.69444, 0, 0, 0.5],
+              95: [0.31, 0.12056, 0.02778, 0, 0.5],
+              97: [0, 0.43056, 0, 0, 0.5],
+              98: [0, 0.69444, 0, 0, 0.55556],
+              99: [0, 0.43056, 0, 0, 0.44445],
+              100: [0, 0.69444, 0, 0, 0.55556],
+              101: [0, 0.43056, 0, 0, 0.44445],
+              102: [0, 0.69444, 0.07778, 0, 0.30556],
+              103: [0.19444, 0.43056, 0.01389, 0, 0.5],
+              104: [0, 0.69444, 0, 0, 0.55556],
+              105: [0, 0.66786, 0, 0, 0.27778],
+              106: [0.19444, 0.66786, 0, 0, 0.30556],
+              107: [0, 0.69444, 0, 0, 0.52778],
+              108: [0, 0.69444, 0, 0, 0.27778],
+              109: [0, 0.43056, 0, 0, 0.83334],
+              110: [0, 0.43056, 0, 0, 0.55556],
+              111: [0, 0.43056, 0, 0, 0.5],
+              112: [0.19444, 0.43056, 0, 0, 0.55556],
+              113: [0.19444, 0.43056, 0, 0, 0.52778],
+              114: [0, 0.43056, 0, 0, 0.39167],
+              115: [0, 0.43056, 0, 0, 0.39445],
+              116: [0, 0.61508, 0, 0, 0.38889],
+              117: [0, 0.43056, 0, 0, 0.55556],
+              118: [0, 0.43056, 0.01389, 0, 0.52778],
+              119: [0, 0.43056, 0.01389, 0, 0.72222],
+              120: [0, 0.43056, 0, 0, 0.52778],
+              121: [0.19444, 0.43056, 0.01389, 0, 0.52778],
+              122: [0, 0.43056, 0, 0, 0.44445],
+              123: [0.25, 0.75, 0, 0, 0.5],
+              124: [0.25, 0.75, 0, 0, 0.27778],
+              125: [0.25, 0.75, 0, 0, 0.5],
+              126: [0.35, 0.31786, 0, 0, 0.5],
+              160: [0, 0, 0, 0, 0.25],
+              163: [0, 0.69444, 0, 0, 0.76909],
+              167: [0.19444, 0.69444, 0, 0, 0.44445],
+              168: [0, 0.66786, 0, 0, 0.5],
+              172: [0, 0.43056, 0, 0, 0.66667],
+              176: [0, 0.69444, 0, 0, 0.75],
+              177: [0.08333, 0.58333, 0, 0, 0.77778],
+              182: [0.19444, 0.69444, 0, 0, 0.61111],
+              184: [0.17014, 0, 0, 0, 0.44445],
+              198: [0, 0.68333, 0, 0, 0.90278],
+              215: [0.08333, 0.58333, 0, 0, 0.77778],
+              216: [0.04861, 0.73194, 0, 0, 0.77778],
+              223: [0, 0.69444, 0, 0, 0.5],
+              230: [0, 0.43056, 0, 0, 0.72222],
+              247: [0.08333, 0.58333, 0, 0, 0.77778],
+              248: [0.09722, 0.52778, 0, 0, 0.5],
+              305: [0, 0.43056, 0, 0, 0.27778],
+              338: [0, 0.68333, 0, 0, 1.01389],
+              339: [0, 0.43056, 0, 0, 0.77778],
+              567: [0.19444, 0.43056, 0, 0, 0.30556],
+              710: [0, 0.69444, 0, 0, 0.5],
+              711: [0, 0.62847, 0, 0, 0.5],
+              713: [0, 0.56778, 0, 0, 0.5],
+              714: [0, 0.69444, 0, 0, 0.5],
+              715: [0, 0.69444, 0, 0, 0.5],
+              728: [0, 0.69444, 0, 0, 0.5],
+              729: [0, 0.66786, 0, 0, 0.27778],
+              730: [0, 0.69444, 0, 0, 0.75],
+              732: [0, 0.66786, 0, 0, 0.5],
+              733: [0, 0.69444, 0, 0, 0.5],
+              915: [0, 0.68333, 0, 0, 0.625],
+              916: [0, 0.68333, 0, 0, 0.83334],
+              920: [0, 0.68333, 0, 0, 0.77778],
+              923: [0, 0.68333, 0, 0, 0.69445],
+              926: [0, 0.68333, 0, 0, 0.66667],
+              928: [0, 0.68333, 0, 0, 0.75],
+              931: [0, 0.68333, 0, 0, 0.72222],
+              933: [0, 0.68333, 0, 0, 0.77778],
+              934: [0, 0.68333, 0, 0, 0.72222],
+              936: [0, 0.68333, 0, 0, 0.77778],
+              937: [0, 0.68333, 0, 0, 0.72222],
+              8211: [0, 0.43056, 0.02778, 0, 0.5],
+              8212: [0, 0.43056, 0.02778, 0, 1],
+              8216: [0, 0.69444, 0, 0, 0.27778],
+              8217: [0, 0.69444, 0, 0, 0.27778],
+              8220: [0, 0.69444, 0, 0, 0.5],
+              8221: [0, 0.69444, 0, 0, 0.5],
+              8224: [0.19444, 0.69444, 0, 0, 0.44445],
+              8225: [0.19444, 0.69444, 0, 0, 0.44445],
+              8230: [0, 0.123, 0, 0, 1.172],
+              8242: [0, 0.55556, 0, 0, 0.275],
+              8407: [0, 0.71444, 0.15382, 0, 0.5],
+              8463: [0, 0.68889, 0, 0, 0.54028],
+              8465: [0, 0.69444, 0, 0, 0.72222],
+              8467: [0, 0.69444, 0, 0.11111, 0.41667],
+              8472: [0.19444, 0.43056, 0, 0.11111, 0.63646],
+              8476: [0, 0.69444, 0, 0, 0.72222],
+              8501: [0, 0.69444, 0, 0, 0.61111],
+              8592: [-0.13313, 0.36687, 0, 0, 1],
+              8593: [0.19444, 0.69444, 0, 0, 0.5],
+              8594: [-0.13313, 0.36687, 0, 0, 1],
+              8595: [0.19444, 0.69444, 0, 0, 0.5],
+              8596: [-0.13313, 0.36687, 0, 0, 1],
+              8597: [0.25, 0.75, 0, 0, 0.5],
+              8598: [0.19444, 0.69444, 0, 0, 1],
+              8599: [0.19444, 0.69444, 0, 0, 1],
+              8600: [0.19444, 0.69444, 0, 0, 1],
+              8601: [0.19444, 0.69444, 0, 0, 1],
+              8614: [0.011, 0.511, 0, 0, 1],
+              8617: [0.011, 0.511, 0, 0, 1.126],
+              8618: [0.011, 0.511, 0, 0, 1.126],
+              8636: [-0.13313, 0.36687, 0, 0, 1],
+              8637: [-0.13313, 0.36687, 0, 0, 1],
+              8640: [-0.13313, 0.36687, 0, 0, 1],
+              8641: [-0.13313, 0.36687, 0, 0, 1],
+              8652: [0.011, 0.671, 0, 0, 1],
+              8656: [-0.13313, 0.36687, 0, 0, 1],
+              8657: [0.19444, 0.69444, 0, 0, 0.61111],
+              8658: [-0.13313, 0.36687, 0, 0, 1],
+              8659: [0.19444, 0.69444, 0, 0, 0.61111],
+              8660: [-0.13313, 0.36687, 0, 0, 1],
+              8661: [0.25, 0.75, 0, 0, 0.61111],
+              8704: [0, 0.69444, 0, 0, 0.55556],
+              8706: [0, 0.69444, 0.05556, 0.08334, 0.5309],
+              8707: [0, 0.69444, 0, 0, 0.55556],
+              8709: [0.05556, 0.75, 0, 0, 0.5],
+              8711: [0, 0.68333, 0, 0, 0.83334],
+              8712: [0.0391, 0.5391, 0, 0, 0.66667],
+              8715: [0.0391, 0.5391, 0, 0, 0.66667],
+              8722: [0.08333, 0.58333, 0, 0, 0.77778],
+              8723: [0.08333, 0.58333, 0, 0, 0.77778],
+              8725: [0.25, 0.75, 0, 0, 0.5],
+              8726: [0.25, 0.75, 0, 0, 0.5],
+              8727: [-0.03472, 0.46528, 0, 0, 0.5],
+              8728: [-0.05555, 0.44445, 0, 0, 0.5],
+              8729: [-0.05555, 0.44445, 0, 0, 0.5],
+              8730: [0.2, 0.8, 0, 0, 0.83334],
+              8733: [0, 0.43056, 0, 0, 0.77778],
+              8734: [0, 0.43056, 0, 0, 1],
+              8736: [0, 0.69224, 0, 0, 0.72222],
+              8739: [0.25, 0.75, 0, 0, 0.27778],
+              8741: [0.25, 0.75, 0, 0, 0.5],
+              8743: [0, 0.55556, 0, 0, 0.66667],
+              8744: [0, 0.55556, 0, 0, 0.66667],
+              8745: [0, 0.55556, 0, 0, 0.66667],
+              8746: [0, 0.55556, 0, 0, 0.66667],
+              8747: [0.19444, 0.69444, 0.11111, 0, 0.41667],
+              8764: [-0.13313, 0.36687, 0, 0, 0.77778],
+              8768: [0.19444, 0.69444, 0, 0, 0.27778],
+              8771: [-0.03625, 0.46375, 0, 0, 0.77778],
+              8773: [-0.022, 0.589, 0, 0, 0.778],
+              8776: [-0.01688, 0.48312, 0, 0, 0.77778],
+              8781: [-0.03625, 0.46375, 0, 0, 0.77778],
+              8784: [-0.133, 0.673, 0, 0, 0.778],
+              8801: [-0.03625, 0.46375, 0, 0, 0.77778],
+              8804: [0.13597, 0.63597, 0, 0, 0.77778],
+              8805: [0.13597, 0.63597, 0, 0, 0.77778],
+              8810: [0.0391, 0.5391, 0, 0, 1],
+              8811: [0.0391, 0.5391, 0, 0, 1],
+              8826: [0.0391, 0.5391, 0, 0, 0.77778],
+              8827: [0.0391, 0.5391, 0, 0, 0.77778],
+              8834: [0.0391, 0.5391, 0, 0, 0.77778],
+              8835: [0.0391, 0.5391, 0, 0, 0.77778],
+              8838: [0.13597, 0.63597, 0, 0, 0.77778],
+              8839: [0.13597, 0.63597, 0, 0, 0.77778],
+              8846: [0, 0.55556, 0, 0, 0.66667],
+              8849: [0.13597, 0.63597, 0, 0, 0.77778],
+              8850: [0.13597, 0.63597, 0, 0, 0.77778],
+              8851: [0, 0.55556, 0, 0, 0.66667],
+              8852: [0, 0.55556, 0, 0, 0.66667],
+              8853: [0.08333, 0.58333, 0, 0, 0.77778],
+              8854: [0.08333, 0.58333, 0, 0, 0.77778],
+              8855: [0.08333, 0.58333, 0, 0, 0.77778],
+              8856: [0.08333, 0.58333, 0, 0, 0.77778],
+              8857: [0.08333, 0.58333, 0, 0, 0.77778],
+              8866: [0, 0.69444, 0, 0, 0.61111],
+              8867: [0, 0.69444, 0, 0, 0.61111],
+              8868: [0, 0.69444, 0, 0, 0.77778],
+              8869: [0, 0.69444, 0, 0, 0.77778],
+              8872: [0.249, 0.75, 0, 0, 0.867],
+              8900: [-0.05555, 0.44445, 0, 0, 0.5],
+              8901: [-0.05555, 0.44445, 0, 0, 0.27778],
+              8902: [-0.03472, 0.46528, 0, 0, 0.5],
+              8904: [5e-3, 0.505, 0, 0, 0.9],
+              8942: [0.03, 0.903, 0, 0, 0.278],
+              8943: [-0.19, 0.313, 0, 0, 1.172],
+              8945: [-0.1, 0.823, 0, 0, 1.282],
+              8968: [0.25, 0.75, 0, 0, 0.44445],
+              8969: [0.25, 0.75, 0, 0, 0.44445],
+              8970: [0.25, 0.75, 0, 0, 0.44445],
+              8971: [0.25, 0.75, 0, 0, 0.44445],
+              8994: [-0.14236, 0.35764, 0, 0, 1],
+              8995: [-0.14236, 0.35764, 0, 0, 1],
+              9136: [0.244, 0.744, 0, 0, 0.412],
+              9137: [0.244, 0.745, 0, 0, 0.412],
+              9651: [0.19444, 0.69444, 0, 0, 0.88889],
+              9657: [-0.03472, 0.46528, 0, 0, 0.5],
+              9661: [0.19444, 0.69444, 0, 0, 0.88889],
+              9667: [-0.03472, 0.46528, 0, 0, 0.5],
+              9711: [0.19444, 0.69444, 0, 0, 1],
+              9824: [0.12963, 0.69444, 0, 0, 0.77778],
+              9825: [0.12963, 0.69444, 0, 0, 0.77778],
+              9826: [0.12963, 0.69444, 0, 0, 0.77778],
+              9827: [0.12963, 0.69444, 0, 0, 0.77778],
+              9837: [0, 0.75, 0, 0, 0.38889],
+              9838: [0.19444, 0.69444, 0, 0, 0.38889],
+              9839: [0.19444, 0.69444, 0, 0, 0.38889],
+              10216: [0.25, 0.75, 0, 0, 0.38889],
+              10217: [0.25, 0.75, 0, 0, 0.38889],
+              10222: [0.244, 0.744, 0, 0, 0.412],
+              10223: [0.244, 0.745, 0, 0, 0.412],
+              10229: [0.011, 0.511, 0, 0, 1.609],
+              10230: [0.011, 0.511, 0, 0, 1.638],
+              10231: [0.011, 0.511, 0, 0, 1.859],
+              10232: [0.024, 0.525, 0, 0, 1.609],
+              10233: [0.024, 0.525, 0, 0, 1.638],
+              10234: [0.024, 0.525, 0, 0, 1.858],
+              10236: [0.011, 0.511, 0, 0, 1.638],
+              10815: [0, 0.68333, 0, 0, 0.75],
+              10927: [0.13597, 0.63597, 0, 0, 0.77778],
+              10928: [0.13597, 0.63597, 0, 0, 0.77778],
+              57376: [0.19444, 0.69444, 0, 0, 0]
+            },
+            "Math-BoldItalic": {
+              32: [0, 0, 0, 0, 0.25],
+              48: [0, 0.44444, 0, 0, 0.575],
+              49: [0, 0.44444, 0, 0, 0.575],
+              50: [0, 0.44444, 0, 0, 0.575],
+              51: [0.19444, 0.44444, 0, 0, 0.575],
+              52: [0.19444, 0.44444, 0, 0, 0.575],
+              53: [0.19444, 0.44444, 0, 0, 0.575],
+              54: [0, 0.64444, 0, 0, 0.575],
+              55: [0.19444, 0.44444, 0, 0, 0.575],
+              56: [0, 0.64444, 0, 0, 0.575],
+              57: [0.19444, 0.44444, 0, 0, 0.575],
+              65: [0, 0.68611, 0, 0, 0.86944],
+              66: [0, 0.68611, 0.04835, 0, 0.8664],
+              67: [0, 0.68611, 0.06979, 0, 0.81694],
+              68: [0, 0.68611, 0.03194, 0, 0.93812],
+              69: [0, 0.68611, 0.05451, 0, 0.81007],
+              70: [0, 0.68611, 0.15972, 0, 0.68889],
+              71: [0, 0.68611, 0, 0, 0.88673],
+              72: [0, 0.68611, 0.08229, 0, 0.98229],
+              73: [0, 0.68611, 0.07778, 0, 0.51111],
+              74: [0, 0.68611, 0.10069, 0, 0.63125],
+              75: [0, 0.68611, 0.06979, 0, 0.97118],
+              76: [0, 0.68611, 0, 0, 0.75555],
+              77: [0, 0.68611, 0.11424, 0, 1.14201],
+              78: [0, 0.68611, 0.11424, 0, 0.95034],
+              79: [0, 0.68611, 0.03194, 0, 0.83666],
+              80: [0, 0.68611, 0.15972, 0, 0.72309],
+              81: [0.19444, 0.68611, 0, 0, 0.86861],
+              82: [0, 0.68611, 421e-5, 0, 0.87235],
+              83: [0, 0.68611, 0.05382, 0, 0.69271],
+              84: [0, 0.68611, 0.15972, 0, 0.63663],
+              85: [0, 0.68611, 0.11424, 0, 0.80027],
+              86: [0, 0.68611, 0.25555, 0, 0.67778],
+              87: [0, 0.68611, 0.15972, 0, 1.09305],
+              88: [0, 0.68611, 0.07778, 0, 0.94722],
+              89: [0, 0.68611, 0.25555, 0, 0.67458],
+              90: [0, 0.68611, 0.06979, 0, 0.77257],
+              97: [0, 0.44444, 0, 0, 0.63287],
+              98: [0, 0.69444, 0, 0, 0.52083],
+              99: [0, 0.44444, 0, 0, 0.51342],
+              100: [0, 0.69444, 0, 0, 0.60972],
+              101: [0, 0.44444, 0, 0, 0.55361],
+              102: [0.19444, 0.69444, 0.11042, 0, 0.56806],
+              103: [0.19444, 0.44444, 0.03704, 0, 0.5449],
+              104: [0, 0.69444, 0, 0, 0.66759],
+              105: [0, 0.69326, 0, 0, 0.4048],
+              106: [0.19444, 0.69326, 0.0622, 0, 0.47083],
+              107: [0, 0.69444, 0.01852, 0, 0.6037],
+              108: [0, 0.69444, 88e-4, 0, 0.34815],
+              109: [0, 0.44444, 0, 0, 1.0324],
+              110: [0, 0.44444, 0, 0, 0.71296],
+              111: [0, 0.44444, 0, 0, 0.58472],
+              112: [0.19444, 0.44444, 0, 0, 0.60092],
+              113: [0.19444, 0.44444, 0.03704, 0, 0.54213],
+              114: [0, 0.44444, 0.03194, 0, 0.5287],
+              115: [0, 0.44444, 0, 0, 0.53125],
+              116: [0, 0.63492, 0, 0, 0.41528],
+              117: [0, 0.44444, 0, 0, 0.68102],
+              118: [0, 0.44444, 0.03704, 0, 0.56666],
+              119: [0, 0.44444, 0.02778, 0, 0.83148],
+              120: [0, 0.44444, 0, 0, 0.65903],
+              121: [0.19444, 0.44444, 0.03704, 0, 0.59028],
+              122: [0, 0.44444, 0.04213, 0, 0.55509],
+              160: [0, 0, 0, 0, 0.25],
+              915: [0, 0.68611, 0.15972, 0, 0.65694],
+              916: [0, 0.68611, 0, 0, 0.95833],
+              920: [0, 0.68611, 0.03194, 0, 0.86722],
+              923: [0, 0.68611, 0, 0, 0.80555],
+              926: [0, 0.68611, 0.07458, 0, 0.84125],
+              928: [0, 0.68611, 0.08229, 0, 0.98229],
+              931: [0, 0.68611, 0.05451, 0, 0.88507],
+              933: [0, 0.68611, 0.15972, 0, 0.67083],
+              934: [0, 0.68611, 0, 0, 0.76666],
+              936: [0, 0.68611, 0.11653, 0, 0.71402],
+              937: [0, 0.68611, 0.04835, 0, 0.8789],
+              945: [0, 0.44444, 0, 0, 0.76064],
+              946: [0.19444, 0.69444, 0.03403, 0, 0.65972],
+              947: [0.19444, 0.44444, 0.06389, 0, 0.59003],
+              948: [0, 0.69444, 0.03819, 0, 0.52222],
+              949: [0, 0.44444, 0, 0, 0.52882],
+              950: [0.19444, 0.69444, 0.06215, 0, 0.50833],
+              951: [0.19444, 0.44444, 0.03704, 0, 0.6],
+              952: [0, 0.69444, 0.03194, 0, 0.5618],
+              953: [0, 0.44444, 0, 0, 0.41204],
+              954: [0, 0.44444, 0, 0, 0.66759],
+              955: [0, 0.69444, 0, 0, 0.67083],
+              956: [0.19444, 0.44444, 0, 0, 0.70787],
+              957: [0, 0.44444, 0.06898, 0, 0.57685],
+              958: [0.19444, 0.69444, 0.03021, 0, 0.50833],
+              959: [0, 0.44444, 0, 0, 0.58472],
+              960: [0, 0.44444, 0.03704, 0, 0.68241],
+              961: [0.19444, 0.44444, 0, 0, 0.6118],
+              962: [0.09722, 0.44444, 0.07917, 0, 0.42361],
+              963: [0, 0.44444, 0.03704, 0, 0.68588],
+              964: [0, 0.44444, 0.13472, 0, 0.52083],
+              965: [0, 0.44444, 0.03704, 0, 0.63055],
+              966: [0.19444, 0.44444, 0, 0, 0.74722],
+              967: [0.19444, 0.44444, 0, 0, 0.71805],
+              968: [0.19444, 0.69444, 0.03704, 0, 0.75833],
+              969: [0, 0.44444, 0.03704, 0, 0.71782],
+              977: [0, 0.69444, 0, 0, 0.69155],
+              981: [0.19444, 0.69444, 0, 0, 0.7125],
+              982: [0, 0.44444, 0.03194, 0, 0.975],
+              1009: [0.19444, 0.44444, 0, 0, 0.6118],
+              1013: [0, 0.44444, 0, 0, 0.48333],
+              57649: [0, 0.44444, 0, 0, 0.39352],
+              57911: [0.19444, 0.44444, 0, 0, 0.43889]
+            },
+            "Math-Italic": {
+              32: [0, 0, 0, 0, 0.25],
+              48: [0, 0.43056, 0, 0, 0.5],
+              49: [0, 0.43056, 0, 0, 0.5],
+              50: [0, 0.43056, 0, 0, 0.5],
+              51: [0.19444, 0.43056, 0, 0, 0.5],
+              52: [0.19444, 0.43056, 0, 0, 0.5],
+              53: [0.19444, 0.43056, 0, 0, 0.5],
+              54: [0, 0.64444, 0, 0, 0.5],
+              55: [0.19444, 0.43056, 0, 0, 0.5],
+              56: [0, 0.64444, 0, 0, 0.5],
+              57: [0.19444, 0.43056, 0, 0, 0.5],
+              65: [0, 0.68333, 0, 0.13889, 0.75],
+              66: [0, 0.68333, 0.05017, 0.08334, 0.75851],
+              67: [0, 0.68333, 0.07153, 0.08334, 0.71472],
+              68: [0, 0.68333, 0.02778, 0.05556, 0.82792],
+              69: [0, 0.68333, 0.05764, 0.08334, 0.7382],
+              70: [0, 0.68333, 0.13889, 0.08334, 0.64306],
+              71: [0, 0.68333, 0, 0.08334, 0.78625],
+              72: [0, 0.68333, 0.08125, 0.05556, 0.83125],
+              73: [0, 0.68333, 0.07847, 0.11111, 0.43958],
+              74: [0, 0.68333, 0.09618, 0.16667, 0.55451],
+              75: [0, 0.68333, 0.07153, 0.05556, 0.84931],
+              76: [0, 0.68333, 0, 0.02778, 0.68056],
+              77: [0, 0.68333, 0.10903, 0.08334, 0.97014],
+              78: [0, 0.68333, 0.10903, 0.08334, 0.80347],
+              79: [0, 0.68333, 0.02778, 0.08334, 0.76278],
+              80: [0, 0.68333, 0.13889, 0.08334, 0.64201],
+              81: [0.19444, 0.68333, 0, 0.08334, 0.79056],
+              82: [0, 0.68333, 773e-5, 0.08334, 0.75929],
+              83: [0, 0.68333, 0.05764, 0.08334, 0.6132],
+              84: [0, 0.68333, 0.13889, 0.08334, 0.58438],
+              85: [0, 0.68333, 0.10903, 0.02778, 0.68278],
+              86: [0, 0.68333, 0.22222, 0, 0.58333],
+              87: [0, 0.68333, 0.13889, 0, 0.94445],
+              88: [0, 0.68333, 0.07847, 0.08334, 0.82847],
+              89: [0, 0.68333, 0.22222, 0, 0.58056],
+              90: [0, 0.68333, 0.07153, 0.08334, 0.68264],
+              97: [0, 0.43056, 0, 0, 0.52859],
+              98: [0, 0.69444, 0, 0, 0.42917],
+              99: [0, 0.43056, 0, 0.05556, 0.43276],
+              100: [0, 0.69444, 0, 0.16667, 0.52049],
+              101: [0, 0.43056, 0, 0.05556, 0.46563],
+              102: [0.19444, 0.69444, 0.10764, 0.16667, 0.48959],
+              103: [0.19444, 0.43056, 0.03588, 0.02778, 0.47697],
+              104: [0, 0.69444, 0, 0, 0.57616],
+              105: [0, 0.65952, 0, 0, 0.34451],
+              106: [0.19444, 0.65952, 0.05724, 0, 0.41181],
+              107: [0, 0.69444, 0.03148, 0, 0.5206],
+              108: [0, 0.69444, 0.01968, 0.08334, 0.29838],
+              109: [0, 0.43056, 0, 0, 0.87801],
+              110: [0, 0.43056, 0, 0, 0.60023],
+              111: [0, 0.43056, 0, 0.05556, 0.48472],
+              112: [0.19444, 0.43056, 0, 0.08334, 0.50313],
+              113: [0.19444, 0.43056, 0.03588, 0.08334, 0.44641],
+              114: [0, 0.43056, 0.02778, 0.05556, 0.45116],
+              115: [0, 0.43056, 0, 0.05556, 0.46875],
+              116: [0, 0.61508, 0, 0.08334, 0.36111],
+              117: [0, 0.43056, 0, 0.02778, 0.57246],
+              118: [0, 0.43056, 0.03588, 0.02778, 0.48472],
+              119: [0, 0.43056, 0.02691, 0.08334, 0.71592],
+              120: [0, 0.43056, 0, 0.02778, 0.57153],
+              121: [0.19444, 0.43056, 0.03588, 0.05556, 0.49028],
+              122: [0, 0.43056, 0.04398, 0.05556, 0.46505],
+              160: [0, 0, 0, 0, 0.25],
+              915: [0, 0.68333, 0.13889, 0.08334, 0.61528],
+              916: [0, 0.68333, 0, 0.16667, 0.83334],
+              920: [0, 0.68333, 0.02778, 0.08334, 0.76278],
+              923: [0, 0.68333, 0, 0.16667, 0.69445],
+              926: [0, 0.68333, 0.07569, 0.08334, 0.74236],
+              928: [0, 0.68333, 0.08125, 0.05556, 0.83125],
+              931: [0, 0.68333, 0.05764, 0.08334, 0.77986],
+              933: [0, 0.68333, 0.13889, 0.05556, 0.58333],
+              934: [0, 0.68333, 0, 0.08334, 0.66667],
+              936: [0, 0.68333, 0.11, 0.05556, 0.61222],
+              937: [0, 0.68333, 0.05017, 0.08334, 0.7724],
+              945: [0, 0.43056, 37e-4, 0.02778, 0.6397],
+              946: [0.19444, 0.69444, 0.05278, 0.08334, 0.56563],
+              947: [0.19444, 0.43056, 0.05556, 0, 0.51773],
+              948: [0, 0.69444, 0.03785, 0.05556, 0.44444],
+              949: [0, 0.43056, 0, 0.08334, 0.46632],
+              950: [0.19444, 0.69444, 0.07378, 0.08334, 0.4375],
+              951: [0.19444, 0.43056, 0.03588, 0.05556, 0.49653],
+              952: [0, 0.69444, 0.02778, 0.08334, 0.46944],
+              953: [0, 0.43056, 0, 0.05556, 0.35394],
+              954: [0, 0.43056, 0, 0, 0.57616],
+              955: [0, 0.69444, 0, 0, 0.58334],
+              956: [0.19444, 0.43056, 0, 0.02778, 0.60255],
+              957: [0, 0.43056, 0.06366, 0.02778, 0.49398],
+              958: [0.19444, 0.69444, 0.04601, 0.11111, 0.4375],
+              959: [0, 0.43056, 0, 0.05556, 0.48472],
+              960: [0, 0.43056, 0.03588, 0, 0.57003],
+              961: [0.19444, 0.43056, 0, 0.08334, 0.51702],
+              962: [0.09722, 0.43056, 0.07986, 0.08334, 0.36285],
+              963: [0, 0.43056, 0.03588, 0, 0.57141],
+              964: [0, 0.43056, 0.1132, 0.02778, 0.43715],
+              965: [0, 0.43056, 0.03588, 0.02778, 0.54028],
+              966: [0.19444, 0.43056, 0, 0.08334, 0.65417],
+              967: [0.19444, 0.43056, 0, 0.05556, 0.62569],
+              968: [0.19444, 0.69444, 0.03588, 0.11111, 0.65139],
+              969: [0, 0.43056, 0.03588, 0, 0.62245],
+              977: [0, 0.69444, 0, 0.08334, 0.59144],
+              981: [0.19444, 0.69444, 0, 0.08334, 0.59583],
+              982: [0, 0.43056, 0.02778, 0, 0.82813],
+              1009: [0.19444, 0.43056, 0, 0.08334, 0.51702],
+              1013: [0, 0.43056, 0, 0.05556, 0.4059],
+              57649: [0, 0.43056, 0, 0.02778, 0.32246],
+              57911: [0.19444, 0.43056, 0, 0.08334, 0.38403]
+            },
+            "SansSerif-Bold": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0, 0, 0.36667],
+              34: [0, 0.69444, 0, 0, 0.55834],
+              35: [0.19444, 0.69444, 0, 0, 0.91667],
+              36: [0.05556, 0.75, 0, 0, 0.55],
+              37: [0.05556, 0.75, 0, 0, 1.02912],
+              38: [0, 0.69444, 0, 0, 0.83056],
+              39: [0, 0.69444, 0, 0, 0.30556],
+              40: [0.25, 0.75, 0, 0, 0.42778],
+              41: [0.25, 0.75, 0, 0, 0.42778],
+              42: [0, 0.75, 0, 0, 0.55],
+              43: [0.11667, 0.61667, 0, 0, 0.85556],
+              44: [0.10556, 0.13056, 0, 0, 0.30556],
+              45: [0, 0.45833, 0, 0, 0.36667],
+              46: [0, 0.13056, 0, 0, 0.30556],
+              47: [0.25, 0.75, 0, 0, 0.55],
+              48: [0, 0.69444, 0, 0, 0.55],
+              49: [0, 0.69444, 0, 0, 0.55],
+              50: [0, 0.69444, 0, 0, 0.55],
+              51: [0, 0.69444, 0, 0, 0.55],
+              52: [0, 0.69444, 0, 0, 0.55],
+              53: [0, 0.69444, 0, 0, 0.55],
+              54: [0, 0.69444, 0, 0, 0.55],
+              55: [0, 0.69444, 0, 0, 0.55],
+              56: [0, 0.69444, 0, 0, 0.55],
+              57: [0, 0.69444, 0, 0, 0.55],
+              58: [0, 0.45833, 0, 0, 0.30556],
+              59: [0.10556, 0.45833, 0, 0, 0.30556],
+              61: [-0.09375, 0.40625, 0, 0, 0.85556],
+              63: [0, 0.69444, 0, 0, 0.51945],
+              64: [0, 0.69444, 0, 0, 0.73334],
+              65: [0, 0.69444, 0, 0, 0.73334],
+              66: [0, 0.69444, 0, 0, 0.73334],
+              67: [0, 0.69444, 0, 0, 0.70278],
+              68: [0, 0.69444, 0, 0, 0.79445],
+              69: [0, 0.69444, 0, 0, 0.64167],
+              70: [0, 0.69444, 0, 0, 0.61111],
+              71: [0, 0.69444, 0, 0, 0.73334],
+              72: [0, 0.69444, 0, 0, 0.79445],
+              73: [0, 0.69444, 0, 0, 0.33056],
+              74: [0, 0.69444, 0, 0, 0.51945],
+              75: [0, 0.69444, 0, 0, 0.76389],
+              76: [0, 0.69444, 0, 0, 0.58056],
+              77: [0, 0.69444, 0, 0, 0.97778],
+              78: [0, 0.69444, 0, 0, 0.79445],
+              79: [0, 0.69444, 0, 0, 0.79445],
+              80: [0, 0.69444, 0, 0, 0.70278],
+              81: [0.10556, 0.69444, 0, 0, 0.79445],
+              82: [0, 0.69444, 0, 0, 0.70278],
+              83: [0, 0.69444, 0, 0, 0.61111],
+              84: [0, 0.69444, 0, 0, 0.73334],
+              85: [0, 0.69444, 0, 0, 0.76389],
+              86: [0, 0.69444, 0.01528, 0, 0.73334],
+              87: [0, 0.69444, 0.01528, 0, 1.03889],
+              88: [0, 0.69444, 0, 0, 0.73334],
+              89: [0, 0.69444, 0.0275, 0, 0.73334],
+              90: [0, 0.69444, 0, 0, 0.67223],
+              91: [0.25, 0.75, 0, 0, 0.34306],
+              93: [0.25, 0.75, 0, 0, 0.34306],
+              94: [0, 0.69444, 0, 0, 0.55],
+              95: [0.35, 0.10833, 0.03056, 0, 0.55],
+              97: [0, 0.45833, 0, 0, 0.525],
+              98: [0, 0.69444, 0, 0, 0.56111],
+              99: [0, 0.45833, 0, 0, 0.48889],
+              100: [0, 0.69444, 0, 0, 0.56111],
+              101: [0, 0.45833, 0, 0, 0.51111],
+              102: [0, 0.69444, 0.07639, 0, 0.33611],
+              103: [0.19444, 0.45833, 0.01528, 0, 0.55],
+              104: [0, 0.69444, 0, 0, 0.56111],
+              105: [0, 0.69444, 0, 0, 0.25556],
+              106: [0.19444, 0.69444, 0, 0, 0.28611],
+              107: [0, 0.69444, 0, 0, 0.53056],
+              108: [0, 0.69444, 0, 0, 0.25556],
+              109: [0, 0.45833, 0, 0, 0.86667],
+              110: [0, 0.45833, 0, 0, 0.56111],
+              111: [0, 0.45833, 0, 0, 0.55],
+              112: [0.19444, 0.45833, 0, 0, 0.56111],
+              113: [0.19444, 0.45833, 0, 0, 0.56111],
+              114: [0, 0.45833, 0.01528, 0, 0.37222],
+              115: [0, 0.45833, 0, 0, 0.42167],
+              116: [0, 0.58929, 0, 0, 0.40417],
+              117: [0, 0.45833, 0, 0, 0.56111],
+              118: [0, 0.45833, 0.01528, 0, 0.5],
+              119: [0, 0.45833, 0.01528, 0, 0.74445],
+              120: [0, 0.45833, 0, 0, 0.5],
+              121: [0.19444, 0.45833, 0.01528, 0, 0.5],
+              122: [0, 0.45833, 0, 0, 0.47639],
+              126: [0.35, 0.34444, 0, 0, 0.55],
+              160: [0, 0, 0, 0, 0.25],
+              168: [0, 0.69444, 0, 0, 0.55],
+              176: [0, 0.69444, 0, 0, 0.73334],
+              180: [0, 0.69444, 0, 0, 0.55],
+              184: [0.17014, 0, 0, 0, 0.48889],
+              305: [0, 0.45833, 0, 0, 0.25556],
+              567: [0.19444, 0.45833, 0, 0, 0.28611],
+              710: [0, 0.69444, 0, 0, 0.55],
+              711: [0, 0.63542, 0, 0, 0.55],
+              713: [0, 0.63778, 0, 0, 0.55],
+              728: [0, 0.69444, 0, 0, 0.55],
+              729: [0, 0.69444, 0, 0, 0.30556],
+              730: [0, 0.69444, 0, 0, 0.73334],
+              732: [0, 0.69444, 0, 0, 0.55],
+              733: [0, 0.69444, 0, 0, 0.55],
+              915: [0, 0.69444, 0, 0, 0.58056],
+              916: [0, 0.69444, 0, 0, 0.91667],
+              920: [0, 0.69444, 0, 0, 0.85556],
+              923: [0, 0.69444, 0, 0, 0.67223],
+              926: [0, 0.69444, 0, 0, 0.73334],
+              928: [0, 0.69444, 0, 0, 0.79445],
+              931: [0, 0.69444, 0, 0, 0.79445],
+              933: [0, 0.69444, 0, 0, 0.85556],
+              934: [0, 0.69444, 0, 0, 0.79445],
+              936: [0, 0.69444, 0, 0, 0.85556],
+              937: [0, 0.69444, 0, 0, 0.79445],
+              8211: [0, 0.45833, 0.03056, 0, 0.55],
+              8212: [0, 0.45833, 0.03056, 0, 1.10001],
+              8216: [0, 0.69444, 0, 0, 0.30556],
+              8217: [0, 0.69444, 0, 0, 0.30556],
+              8220: [0, 0.69444, 0, 0, 0.55834],
+              8221: [0, 0.69444, 0, 0, 0.55834]
+            },
+            "SansSerif-Italic": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0.05733, 0, 0.31945],
+              34: [0, 0.69444, 316e-5, 0, 0.5],
+              35: [0.19444, 0.69444, 0.05087, 0, 0.83334],
+              36: [0.05556, 0.75, 0.11156, 0, 0.5],
+              37: [0.05556, 0.75, 0.03126, 0, 0.83334],
+              38: [0, 0.69444, 0.03058, 0, 0.75834],
+              39: [0, 0.69444, 0.07816, 0, 0.27778],
+              40: [0.25, 0.75, 0.13164, 0, 0.38889],
+              41: [0.25, 0.75, 0.02536, 0, 0.38889],
+              42: [0, 0.75, 0.11775, 0, 0.5],
+              43: [0.08333, 0.58333, 0.02536, 0, 0.77778],
+              44: [0.125, 0.08333, 0, 0, 0.27778],
+              45: [0, 0.44444, 0.01946, 0, 0.33333],
+              46: [0, 0.08333, 0, 0, 0.27778],
+              47: [0.25, 0.75, 0.13164, 0, 0.5],
+              48: [0, 0.65556, 0.11156, 0, 0.5],
+              49: [0, 0.65556, 0.11156, 0, 0.5],
+              50: [0, 0.65556, 0.11156, 0, 0.5],
+              51: [0, 0.65556, 0.11156, 0, 0.5],
+              52: [0, 0.65556, 0.11156, 0, 0.5],
+              53: [0, 0.65556, 0.11156, 0, 0.5],
+              54: [0, 0.65556, 0.11156, 0, 0.5],
+              55: [0, 0.65556, 0.11156, 0, 0.5],
+              56: [0, 0.65556, 0.11156, 0, 0.5],
+              57: [0, 0.65556, 0.11156, 0, 0.5],
+              58: [0, 0.44444, 0.02502, 0, 0.27778],
+              59: [0.125, 0.44444, 0.02502, 0, 0.27778],
+              61: [-0.13, 0.37, 0.05087, 0, 0.77778],
+              63: [0, 0.69444, 0.11809, 0, 0.47222],
+              64: [0, 0.69444, 0.07555, 0, 0.66667],
+              65: [0, 0.69444, 0, 0, 0.66667],
+              66: [0, 0.69444, 0.08293, 0, 0.66667],
+              67: [0, 0.69444, 0.11983, 0, 0.63889],
+              68: [0, 0.69444, 0.07555, 0, 0.72223],
+              69: [0, 0.69444, 0.11983, 0, 0.59722],
+              70: [0, 0.69444, 0.13372, 0, 0.56945],
+              71: [0, 0.69444, 0.11983, 0, 0.66667],
+              72: [0, 0.69444, 0.08094, 0, 0.70834],
+              73: [0, 0.69444, 0.13372, 0, 0.27778],
+              74: [0, 0.69444, 0.08094, 0, 0.47222],
+              75: [0, 0.69444, 0.11983, 0, 0.69445],
+              76: [0, 0.69444, 0, 0, 0.54167],
+              77: [0, 0.69444, 0.08094, 0, 0.875],
+              78: [0, 0.69444, 0.08094, 0, 0.70834],
+              79: [0, 0.69444, 0.07555, 0, 0.73611],
+              80: [0, 0.69444, 0.08293, 0, 0.63889],
+              81: [0.125, 0.69444, 0.07555, 0, 0.73611],
+              82: [0, 0.69444, 0.08293, 0, 0.64584],
+              83: [0, 0.69444, 0.09205, 0, 0.55556],
+              84: [0, 0.69444, 0.13372, 0, 0.68056],
+              85: [0, 0.69444, 0.08094, 0, 0.6875],
+              86: [0, 0.69444, 0.1615, 0, 0.66667],
+              87: [0, 0.69444, 0.1615, 0, 0.94445],
+              88: [0, 0.69444, 0.13372, 0, 0.66667],
+              89: [0, 0.69444, 0.17261, 0, 0.66667],
+              90: [0, 0.69444, 0.11983, 0, 0.61111],
+              91: [0.25, 0.75, 0.15942, 0, 0.28889],
+              93: [0.25, 0.75, 0.08719, 0, 0.28889],
+              94: [0, 0.69444, 0.0799, 0, 0.5],
+              95: [0.35, 0.09444, 0.08616, 0, 0.5],
+              97: [0, 0.44444, 981e-5, 0, 0.48056],
+              98: [0, 0.69444, 0.03057, 0, 0.51667],
+              99: [0, 0.44444, 0.08336, 0, 0.44445],
+              100: [0, 0.69444, 0.09483, 0, 0.51667],
+              101: [0, 0.44444, 0.06778, 0, 0.44445],
+              102: [0, 0.69444, 0.21705, 0, 0.30556],
+              103: [0.19444, 0.44444, 0.10836, 0, 0.5],
+              104: [0, 0.69444, 0.01778, 0, 0.51667],
+              105: [0, 0.67937, 0.09718, 0, 0.23889],
+              106: [0.19444, 0.67937, 0.09162, 0, 0.26667],
+              107: [0, 0.69444, 0.08336, 0, 0.48889],
+              108: [0, 0.69444, 0.09483, 0, 0.23889],
+              109: [0, 0.44444, 0.01778, 0, 0.79445],
+              110: [0, 0.44444, 0.01778, 0, 0.51667],
+              111: [0, 0.44444, 0.06613, 0, 0.5],
+              112: [0.19444, 0.44444, 0.0389, 0, 0.51667],
+              113: [0.19444, 0.44444, 0.04169, 0, 0.51667],
+              114: [0, 0.44444, 0.10836, 0, 0.34167],
+              115: [0, 0.44444, 0.0778, 0, 0.38333],
+              116: [0, 0.57143, 0.07225, 0, 0.36111],
+              117: [0, 0.44444, 0.04169, 0, 0.51667],
+              118: [0, 0.44444, 0.10836, 0, 0.46111],
+              119: [0, 0.44444, 0.10836, 0, 0.68334],
+              120: [0, 0.44444, 0.09169, 0, 0.46111],
+              121: [0.19444, 0.44444, 0.10836, 0, 0.46111],
+              122: [0, 0.44444, 0.08752, 0, 0.43472],
+              126: [0.35, 0.32659, 0.08826, 0, 0.5],
+              160: [0, 0, 0, 0, 0.25],
+              168: [0, 0.67937, 0.06385, 0, 0.5],
+              176: [0, 0.69444, 0, 0, 0.73752],
+              184: [0.17014, 0, 0, 0, 0.44445],
+              305: [0, 0.44444, 0.04169, 0, 0.23889],
+              567: [0.19444, 0.44444, 0.04169, 0, 0.26667],
+              710: [0, 0.69444, 0.0799, 0, 0.5],
+              711: [0, 0.63194, 0.08432, 0, 0.5],
+              713: [0, 0.60889, 0.08776, 0, 0.5],
+              714: [0, 0.69444, 0.09205, 0, 0.5],
+              715: [0, 0.69444, 0, 0, 0.5],
+              728: [0, 0.69444, 0.09483, 0, 0.5],
+              729: [0, 0.67937, 0.07774, 0, 0.27778],
+              730: [0, 0.69444, 0, 0, 0.73752],
+              732: [0, 0.67659, 0.08826, 0, 0.5],
+              733: [0, 0.69444, 0.09205, 0, 0.5],
+              915: [0, 0.69444, 0.13372, 0, 0.54167],
+              916: [0, 0.69444, 0, 0, 0.83334],
+              920: [0, 0.69444, 0.07555, 0, 0.77778],
+              923: [0, 0.69444, 0, 0, 0.61111],
+              926: [0, 0.69444, 0.12816, 0, 0.66667],
+              928: [0, 0.69444, 0.08094, 0, 0.70834],
+              931: [0, 0.69444, 0.11983, 0, 0.72222],
+              933: [0, 0.69444, 0.09031, 0, 0.77778],
+              934: [0, 0.69444, 0.04603, 0, 0.72222],
+              936: [0, 0.69444, 0.09031, 0, 0.77778],
+              937: [0, 0.69444, 0.08293, 0, 0.72222],
+              8211: [0, 0.44444, 0.08616, 0, 0.5],
+              8212: [0, 0.44444, 0.08616, 0, 1],
+              8216: [0, 0.69444, 0.07816, 0, 0.27778],
+              8217: [0, 0.69444, 0.07816, 0, 0.27778],
+              8220: [0, 0.69444, 0.14205, 0, 0.5],
+              8221: [0, 0.69444, 316e-5, 0, 0.5]
+            },
+            "SansSerif-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              33: [0, 0.69444, 0, 0, 0.31945],
+              34: [0, 0.69444, 0, 0, 0.5],
+              35: [0.19444, 0.69444, 0, 0, 0.83334],
+              36: [0.05556, 0.75, 0, 0, 0.5],
+              37: [0.05556, 0.75, 0, 0, 0.83334],
+              38: [0, 0.69444, 0, 0, 0.75834],
+              39: [0, 0.69444, 0, 0, 0.27778],
+              40: [0.25, 0.75, 0, 0, 0.38889],
+              41: [0.25, 0.75, 0, 0, 0.38889],
+              42: [0, 0.75, 0, 0, 0.5],
+              43: [0.08333, 0.58333, 0, 0, 0.77778],
+              44: [0.125, 0.08333, 0, 0, 0.27778],
+              45: [0, 0.44444, 0, 0, 0.33333],
+              46: [0, 0.08333, 0, 0, 0.27778],
+              47: [0.25, 0.75, 0, 0, 0.5],
+              48: [0, 0.65556, 0, 0, 0.5],
+              49: [0, 0.65556, 0, 0, 0.5],
+              50: [0, 0.65556, 0, 0, 0.5],
+              51: [0, 0.65556, 0, 0, 0.5],
+              52: [0, 0.65556, 0, 0, 0.5],
+              53: [0, 0.65556, 0, 0, 0.5],
+              54: [0, 0.65556, 0, 0, 0.5],
+              55: [0, 0.65556, 0, 0, 0.5],
+              56: [0, 0.65556, 0, 0, 0.5],
+              57: [0, 0.65556, 0, 0, 0.5],
+              58: [0, 0.44444, 0, 0, 0.27778],
+              59: [0.125, 0.44444, 0, 0, 0.27778],
+              61: [-0.13, 0.37, 0, 0, 0.77778],
+              63: [0, 0.69444, 0, 0, 0.47222],
+              64: [0, 0.69444, 0, 0, 0.66667],
+              65: [0, 0.69444, 0, 0, 0.66667],
+              66: [0, 0.69444, 0, 0, 0.66667],
+              67: [0, 0.69444, 0, 0, 0.63889],
+              68: [0, 0.69444, 0, 0, 0.72223],
+              69: [0, 0.69444, 0, 0, 0.59722],
+              70: [0, 0.69444, 0, 0, 0.56945],
+              71: [0, 0.69444, 0, 0, 0.66667],
+              72: [0, 0.69444, 0, 0, 0.70834],
+              73: [0, 0.69444, 0, 0, 0.27778],
+              74: [0, 0.69444, 0, 0, 0.47222],
+              75: [0, 0.69444, 0, 0, 0.69445],
+              76: [0, 0.69444, 0, 0, 0.54167],
+              77: [0, 0.69444, 0, 0, 0.875],
+              78: [0, 0.69444, 0, 0, 0.70834],
+              79: [0, 0.69444, 0, 0, 0.73611],
+              80: [0, 0.69444, 0, 0, 0.63889],
+              81: [0.125, 0.69444, 0, 0, 0.73611],
+              82: [0, 0.69444, 0, 0, 0.64584],
+              83: [0, 0.69444, 0, 0, 0.55556],
+              84: [0, 0.69444, 0, 0, 0.68056],
+              85: [0, 0.69444, 0, 0, 0.6875],
+              86: [0, 0.69444, 0.01389, 0, 0.66667],
+              87: [0, 0.69444, 0.01389, 0, 0.94445],
+              88: [0, 0.69444, 0, 0, 0.66667],
+              89: [0, 0.69444, 0.025, 0, 0.66667],
+              90: [0, 0.69444, 0, 0, 0.61111],
+              91: [0.25, 0.75, 0, 0, 0.28889],
+              93: [0.25, 0.75, 0, 0, 0.28889],
+              94: [0, 0.69444, 0, 0, 0.5],
+              95: [0.35, 0.09444, 0.02778, 0, 0.5],
+              97: [0, 0.44444, 0, 0, 0.48056],
+              98: [0, 0.69444, 0, 0, 0.51667],
+              99: [0, 0.44444, 0, 0, 0.44445],
+              100: [0, 0.69444, 0, 0, 0.51667],
+              101: [0, 0.44444, 0, 0, 0.44445],
+              102: [0, 0.69444, 0.06944, 0, 0.30556],
+              103: [0.19444, 0.44444, 0.01389, 0, 0.5],
+              104: [0, 0.69444, 0, 0, 0.51667],
+              105: [0, 0.67937, 0, 0, 0.23889],
+              106: [0.19444, 0.67937, 0, 0, 0.26667],
+              107: [0, 0.69444, 0, 0, 0.48889],
+              108: [0, 0.69444, 0, 0, 0.23889],
+              109: [0, 0.44444, 0, 0, 0.79445],
+              110: [0, 0.44444, 0, 0, 0.51667],
+              111: [0, 0.44444, 0, 0, 0.5],
+              112: [0.19444, 0.44444, 0, 0, 0.51667],
+              113: [0.19444, 0.44444, 0, 0, 0.51667],
+              114: [0, 0.44444, 0.01389, 0, 0.34167],
+              115: [0, 0.44444, 0, 0, 0.38333],
+              116: [0, 0.57143, 0, 0, 0.36111],
+              117: [0, 0.44444, 0, 0, 0.51667],
+              118: [0, 0.44444, 0.01389, 0, 0.46111],
+              119: [0, 0.44444, 0.01389, 0, 0.68334],
+              120: [0, 0.44444, 0, 0, 0.46111],
+              121: [0.19444, 0.44444, 0.01389, 0, 0.46111],
+              122: [0, 0.44444, 0, 0, 0.43472],
+              126: [0.35, 0.32659, 0, 0, 0.5],
+              160: [0, 0, 0, 0, 0.25],
+              168: [0, 0.67937, 0, 0, 0.5],
+              176: [0, 0.69444, 0, 0, 0.66667],
+              184: [0.17014, 0, 0, 0, 0.44445],
+              305: [0, 0.44444, 0, 0, 0.23889],
+              567: [0.19444, 0.44444, 0, 0, 0.26667],
+              710: [0, 0.69444, 0, 0, 0.5],
+              711: [0, 0.63194, 0, 0, 0.5],
+              713: [0, 0.60889, 0, 0, 0.5],
+              714: [0, 0.69444, 0, 0, 0.5],
+              715: [0, 0.69444, 0, 0, 0.5],
+              728: [0, 0.69444, 0, 0, 0.5],
+              729: [0, 0.67937, 0, 0, 0.27778],
+              730: [0, 0.69444, 0, 0, 0.66667],
+              732: [0, 0.67659, 0, 0, 0.5],
+              733: [0, 0.69444, 0, 0, 0.5],
+              915: [0, 0.69444, 0, 0, 0.54167],
+              916: [0, 0.69444, 0, 0, 0.83334],
+              920: [0, 0.69444, 0, 0, 0.77778],
+              923: [0, 0.69444, 0, 0, 0.61111],
+              926: [0, 0.69444, 0, 0, 0.66667],
+              928: [0, 0.69444, 0, 0, 0.70834],
+              931: [0, 0.69444, 0, 0, 0.72222],
+              933: [0, 0.69444, 0, 0, 0.77778],
+              934: [0, 0.69444, 0, 0, 0.72222],
+              936: [0, 0.69444, 0, 0, 0.77778],
+              937: [0, 0.69444, 0, 0, 0.72222],
+              8211: [0, 0.44444, 0.02778, 0, 0.5],
+              8212: [0, 0.44444, 0.02778, 0, 1],
+              8216: [0, 0.69444, 0, 0, 0.27778],
+              8217: [0, 0.69444, 0, 0, 0.27778],
+              8220: [0, 0.69444, 0, 0, 0.5],
+              8221: [0, 0.69444, 0, 0, 0.5]
+            },
+            "Script-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              65: [0, 0.7, 0.22925, 0, 0.80253],
+              66: [0, 0.7, 0.04087, 0, 0.90757],
+              67: [0, 0.7, 0.1689, 0, 0.66619],
+              68: [0, 0.7, 0.09371, 0, 0.77443],
+              69: [0, 0.7, 0.18583, 0, 0.56162],
+              70: [0, 0.7, 0.13634, 0, 0.89544],
+              71: [0, 0.7, 0.17322, 0, 0.60961],
+              72: [0, 0.7, 0.29694, 0, 0.96919],
+              73: [0, 0.7, 0.19189, 0, 0.80907],
+              74: [0.27778, 0.7, 0.19189, 0, 1.05159],
+              75: [0, 0.7, 0.31259, 0, 0.91364],
+              76: [0, 0.7, 0.19189, 0, 0.87373],
+              77: [0, 0.7, 0.15981, 0, 1.08031],
+              78: [0, 0.7, 0.3525, 0, 0.9015],
+              79: [0, 0.7, 0.08078, 0, 0.73787],
+              80: [0, 0.7, 0.08078, 0, 1.01262],
+              81: [0, 0.7, 0.03305, 0, 0.88282],
+              82: [0, 0.7, 0.06259, 0, 0.85],
+              83: [0, 0.7, 0.19189, 0, 0.86767],
+              84: [0, 0.7, 0.29087, 0, 0.74697],
+              85: [0, 0.7, 0.25815, 0, 0.79996],
+              86: [0, 0.7, 0.27523, 0, 0.62204],
+              87: [0, 0.7, 0.27523, 0, 0.80532],
+              88: [0, 0.7, 0.26006, 0, 0.94445],
+              89: [0, 0.7, 0.2939, 0, 0.70961],
+              90: [0, 0.7, 0.24037, 0, 0.8212],
+              160: [0, 0, 0, 0, 0.25]
+            },
+            "Size1-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              40: [0.35001, 0.85, 0, 0, 0.45834],
+              41: [0.35001, 0.85, 0, 0, 0.45834],
+              47: [0.35001, 0.85, 0, 0, 0.57778],
+              91: [0.35001, 0.85, 0, 0, 0.41667],
+              92: [0.35001, 0.85, 0, 0, 0.57778],
+              93: [0.35001, 0.85, 0, 0, 0.41667],
+              123: [0.35001, 0.85, 0, 0, 0.58334],
+              125: [0.35001, 0.85, 0, 0, 0.58334],
+              160: [0, 0, 0, 0, 0.25],
+              710: [0, 0.72222, 0, 0, 0.55556],
+              732: [0, 0.72222, 0, 0, 0.55556],
+              770: [0, 0.72222, 0, 0, 0.55556],
+              771: [0, 0.72222, 0, 0, 0.55556],
+              8214: [-99e-5, 0.601, 0, 0, 0.77778],
+              8593: [1e-5, 0.6, 0, 0, 0.66667],
+              8595: [1e-5, 0.6, 0, 0, 0.66667],
+              8657: [1e-5, 0.6, 0, 0, 0.77778],
+              8659: [1e-5, 0.6, 0, 0, 0.77778],
+              8719: [0.25001, 0.75, 0, 0, 0.94445],
+              8720: [0.25001, 0.75, 0, 0, 0.94445],
+              8721: [0.25001, 0.75, 0, 0, 1.05556],
+              8730: [0.35001, 0.85, 0, 0, 1],
+              8739: [-599e-5, 0.606, 0, 0, 0.33333],
+              8741: [-599e-5, 0.606, 0, 0, 0.55556],
+              8747: [0.30612, 0.805, 0.19445, 0, 0.47222],
+              8748: [0.306, 0.805, 0.19445, 0, 0.47222],
+              8749: [0.306, 0.805, 0.19445, 0, 0.47222],
+              8750: [0.30612, 0.805, 0.19445, 0, 0.47222],
+              8896: [0.25001, 0.75, 0, 0, 0.83334],
+              8897: [0.25001, 0.75, 0, 0, 0.83334],
+              8898: [0.25001, 0.75, 0, 0, 0.83334],
+              8899: [0.25001, 0.75, 0, 0, 0.83334],
+              8968: [0.35001, 0.85, 0, 0, 0.47222],
+              8969: [0.35001, 0.85, 0, 0, 0.47222],
+              8970: [0.35001, 0.85, 0, 0, 0.47222],
+              8971: [0.35001, 0.85, 0, 0, 0.47222],
+              9168: [-99e-5, 0.601, 0, 0, 0.66667],
+              10216: [0.35001, 0.85, 0, 0, 0.47222],
+              10217: [0.35001, 0.85, 0, 0, 0.47222],
+              10752: [0.25001, 0.75, 0, 0, 1.11111],
+              10753: [0.25001, 0.75, 0, 0, 1.11111],
+              10754: [0.25001, 0.75, 0, 0, 1.11111],
+              10756: [0.25001, 0.75, 0, 0, 0.83334],
+              10758: [0.25001, 0.75, 0, 0, 0.83334]
+            },
+            "Size2-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              40: [0.65002, 1.15, 0, 0, 0.59722],
+              41: [0.65002, 1.15, 0, 0, 0.59722],
+              47: [0.65002, 1.15, 0, 0, 0.81111],
+              91: [0.65002, 1.15, 0, 0, 0.47222],
+              92: [0.65002, 1.15, 0, 0, 0.81111],
+              93: [0.65002, 1.15, 0, 0, 0.47222],
+              123: [0.65002, 1.15, 0, 0, 0.66667],
+              125: [0.65002, 1.15, 0, 0, 0.66667],
+              160: [0, 0, 0, 0, 0.25],
+              710: [0, 0.75, 0, 0, 1],
+              732: [0, 0.75, 0, 0, 1],
+              770: [0, 0.75, 0, 0, 1],
+              771: [0, 0.75, 0, 0, 1],
+              8719: [0.55001, 1.05, 0, 0, 1.27778],
+              8720: [0.55001, 1.05, 0, 0, 1.27778],
+              8721: [0.55001, 1.05, 0, 0, 1.44445],
+              8730: [0.65002, 1.15, 0, 0, 1],
+              8747: [0.86225, 1.36, 0.44445, 0, 0.55556],
+              8748: [0.862, 1.36, 0.44445, 0, 0.55556],
+              8749: [0.862, 1.36, 0.44445, 0, 0.55556],
+              8750: [0.86225, 1.36, 0.44445, 0, 0.55556],
+              8896: [0.55001, 1.05, 0, 0, 1.11111],
+              8897: [0.55001, 1.05, 0, 0, 1.11111],
+              8898: [0.55001, 1.05, 0, 0, 1.11111],
+              8899: [0.55001, 1.05, 0, 0, 1.11111],
+              8968: [0.65002, 1.15, 0, 0, 0.52778],
+              8969: [0.65002, 1.15, 0, 0, 0.52778],
+              8970: [0.65002, 1.15, 0, 0, 0.52778],
+              8971: [0.65002, 1.15, 0, 0, 0.52778],
+              10216: [0.65002, 1.15, 0, 0, 0.61111],
+              10217: [0.65002, 1.15, 0, 0, 0.61111],
+              10752: [0.55001, 1.05, 0, 0, 1.51112],
+              10753: [0.55001, 1.05, 0, 0, 1.51112],
+              10754: [0.55001, 1.05, 0, 0, 1.51112],
+              10756: [0.55001, 1.05, 0, 0, 1.11111],
+              10758: [0.55001, 1.05, 0, 0, 1.11111]
+            },
+            "Size3-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              40: [0.95003, 1.45, 0, 0, 0.73611],
+              41: [0.95003, 1.45, 0, 0, 0.73611],
+              47: [0.95003, 1.45, 0, 0, 1.04445],
+              91: [0.95003, 1.45, 0, 0, 0.52778],
+              92: [0.95003, 1.45, 0, 0, 1.04445],
+              93: [0.95003, 1.45, 0, 0, 0.52778],
+              123: [0.95003, 1.45, 0, 0, 0.75],
+              125: [0.95003, 1.45, 0, 0, 0.75],
+              160: [0, 0, 0, 0, 0.25],
+              710: [0, 0.75, 0, 0, 1.44445],
+              732: [0, 0.75, 0, 0, 1.44445],
+              770: [0, 0.75, 0, 0, 1.44445],
+              771: [0, 0.75, 0, 0, 1.44445],
+              8730: [0.95003, 1.45, 0, 0, 1],
+              8968: [0.95003, 1.45, 0, 0, 0.58334],
+              8969: [0.95003, 1.45, 0, 0, 0.58334],
+              8970: [0.95003, 1.45, 0, 0, 0.58334],
+              8971: [0.95003, 1.45, 0, 0, 0.58334],
+              10216: [0.95003, 1.45, 0, 0, 0.75],
+              10217: [0.95003, 1.45, 0, 0, 0.75]
+            },
+            "Size4-Regular": {
+              32: [0, 0, 0, 0, 0.25],
+              40: [1.25003, 1.75, 0, 0, 0.79167],
+              41: [1.25003, 1.75, 0, 0, 0.79167],
+              47: [1.25003, 1.75, 0, 0, 1.27778],
+              91: [1.25003, 1.75, 0, 0, 0.58334],
+              92: [1.25003, 1.75, 0, 0, 1.27778],
+              93: [1.25003, 1.75, 0, 0, 0.58334],
+              123: [1.25003, 1.75, 0, 0, 0.80556],
+              125: [1.25003, 1.75, 0, 0, 0.80556],
+              160: [0, 0, 0, 0, 0.25],
+              710: [0, 0.825, 0, 0, 1.8889],
+              732: [0, 0.825, 0, 0, 1.8889],
+              770: [0, 0.825, 0, 0, 1.8889],
+              771: [0, 0.825, 0, 0, 1.8889],
+              8730: [1.25003, 1.75, 0, 0, 1],
+              8968: [1.25003, 1.75, 0, 0, 0.63889],
+              8969: [1.25003, 1.75, 0, 0, 0.63889],
+              8970: [1.25003, 1.75, 0, 0, 0.63889],
+              8971: [1.25003, 1.75, 0, 0, 0.63889],
+              9115: [0.64502, 1.155, 0, 0, 0.875],
+              9116: [1e-5, 0.6, 0, 0, 0.875],
+              9117: [0.64502, 1.155, 0, 0, 0.875],
+              9118: [0.64502, 1.155, 0, 0, 0.875],
+              9119: [1e-5, 0.6, 0, 0, 0.875],
+              9120: [0.64502, 1.155, 0, 0, 0.875],
+              9121: [0.64502, 1.155, 0, 0, 0.66667],
+              9122: [-99e-5, 0.601, 0, 0, 0.66667],
+              9123: [0.64502, 1.155, 0, 0, 0.66667],
+              9124: [0.64502, 1.155, 0, 0, 0.66667],
+              9125: [-99e-5, 0.601, 0, 0, 0.66667],
+              9126: [0.64502, 1.155, 0, 0, 0.66667],
+              9127: [1e-5, 0.9, 0, 0, 0.88889],
+              9128: [0.65002, 1.15, 0, 0, 0.88889],
+              9129: [0.90001, 0, 0, 0, 0.88889],
+              9130: [0, 0.3, 0, 0, 0.88889],
+              9131: [1e-5, 0.9, 0, 0, 0.88889],
+              9132: [0.65002, 1.15, 0, 0, 0.88889],
+              9133: [0.90001, 0, 0, 0, 0.88889],
+              9143: [0.88502, 0.915, 0, 0, 1.05556],
+              10216: [1.25003, 1.75, 0, 0, 0.80556],
+              10217: [1.25003, 1.75, 0, 0, 0.80556],
+              57344: [-499e-5, 0.605, 0, 0, 1.05556],
+              57345: [-499e-5, 0.605, 0, 0, 1.05556],
+              57680: [0, 0.12, 0, 0, 0.45],
+              57681: [0, 0.12, 0, 0, 0.45],
+              57682: [0, 0.12, 0, 0, 0.45],
+              57683: [0, 0.12, 0, 0, 0.45]
+            },
+            "Typewriter-Regular": {
+              32: [0, 0, 0, 0, 0.525],
+              33: [0, 0.61111, 0, 0, 0.525],
+              34: [0, 0.61111, 0, 0, 0.525],
+              35: [0, 0.61111, 0, 0, 0.525],
+              36: [0.08333, 0.69444, 0, 0, 0.525],
+              37: [0.08333, 0.69444, 0, 0, 0.525],
+              38: [0, 0.61111, 0, 0, 0.525],
+              39: [0, 0.61111, 0, 0, 0.525],
+              40: [0.08333, 0.69444, 0, 0, 0.525],
+              41: [0.08333, 0.69444, 0, 0, 0.525],
+              42: [0, 0.52083, 0, 0, 0.525],
+              43: [-0.08056, 0.53055, 0, 0, 0.525],
+              44: [0.13889, 0.125, 0, 0, 0.525],
+              45: [-0.08056, 0.53055, 0, 0, 0.525],
+              46: [0, 0.125, 0, 0, 0.525],
+              47: [0.08333, 0.69444, 0, 0, 0.525],
+              48: [0, 0.61111, 0, 0, 0.525],
+              49: [0, 0.61111, 0, 0, 0.525],
+              50: [0, 0.61111, 0, 0, 0.525],
+              51: [0, 0.61111, 0, 0, 0.525],
+              52: [0, 0.61111, 0, 0, 0.525],
+              53: [0, 0.61111, 0, 0, 0.525],
+              54: [0, 0.61111, 0, 0, 0.525],
+              55: [0, 0.61111, 0, 0, 0.525],
+              56: [0, 0.61111, 0, 0, 0.525],
+              57: [0, 0.61111, 0, 0, 0.525],
+              58: [0, 0.43056, 0, 0, 0.525],
+              59: [0.13889, 0.43056, 0, 0, 0.525],
+              60: [-0.05556, 0.55556, 0, 0, 0.525],
+              61: [-0.19549, 0.41562, 0, 0, 0.525],
+              62: [-0.05556, 0.55556, 0, 0, 0.525],
+              63: [0, 0.61111, 0, 0, 0.525],
+              64: [0, 0.61111, 0, 0, 0.525],
+              65: [0, 0.61111, 0, 0, 0.525],
+              66: [0, 0.61111, 0, 0, 0.525],
+              67: [0, 0.61111, 0, 0, 0.525],
+              68: [0, 0.61111, 0, 0, 0.525],
+              69: [0, 0.61111, 0, 0, 0.525],
+              70: [0, 0.61111, 0, 0, 0.525],
+              71: [0, 0.61111, 0, 0, 0.525],
+              72: [0, 0.61111, 0, 0, 0.525],
+              73: [0, 0.61111, 0, 0, 0.525],
+              74: [0, 0.61111, 0, 0, 0.525],
+              75: [0, 0.61111, 0, 0, 0.525],
+              76: [0, 0.61111, 0, 0, 0.525],
+              77: [0, 0.61111, 0, 0, 0.525],
+              78: [0, 0.61111, 0, 0, 0.525],
+              79: [0, 0.61111, 0, 0, 0.525],
+              80: [0, 0.61111, 0, 0, 0.525],
+              81: [0.13889, 0.61111, 0, 0, 0.525],
+              82: [0, 0.61111, 0, 0, 0.525],
+              83: [0, 0.61111, 0, 0, 0.525],
+              84: [0, 0.61111, 0, 0, 0.525],
+              85: [0, 0.61111, 0, 0, 0.525],
+              86: [0, 0.61111, 0, 0, 0.525],
+              87: [0, 0.61111, 0, 0, 0.525],
+              88: [0, 0.61111, 0, 0, 0.525],
+              89: [0, 0.61111, 0, 0, 0.525],
+              90: [0, 0.61111, 0, 0, 0.525],
+              91: [0.08333, 0.69444, 0, 0, 0.525],
+              92: [0.08333, 0.69444, 0, 0, 0.525],
+              93: [0.08333, 0.69444, 0, 0, 0.525],
+              94: [0, 0.61111, 0, 0, 0.525],
+              95: [0.09514, 0, 0, 0, 0.525],
+              96: [0, 0.61111, 0, 0, 0.525],
+              97: [0, 0.43056, 0, 0, 0.525],
+              98: [0, 0.61111, 0, 0, 0.525],
+              99: [0, 0.43056, 0, 0, 0.525],
+              100: [0, 0.61111, 0, 0, 0.525],
+              101: [0, 0.43056, 0, 0, 0.525],
+              102: [0, 0.61111, 0, 0, 0.525],
+              103: [0.22222, 0.43056, 0, 0, 0.525],
+              104: [0, 0.61111, 0, 0, 0.525],
+              105: [0, 0.61111, 0, 0, 0.525],
+              106: [0.22222, 0.61111, 0, 0, 0.525],
+              107: [0, 0.61111, 0, 0, 0.525],
+              108: [0, 0.61111, 0, 0, 0.525],
+              109: [0, 0.43056, 0, 0, 0.525],
+              110: [0, 0.43056, 0, 0, 0.525],
+              111: [0, 0.43056, 0, 0, 0.525],
+              112: [0.22222, 0.43056, 0, 0, 0.525],
+              113: [0.22222, 0.43056, 0, 0, 0.525],
+              114: [0, 0.43056, 0, 0, 0.525],
+              115: [0, 0.43056, 0, 0, 0.525],
+              116: [0, 0.55358, 0, 0, 0.525],
+              117: [0, 0.43056, 0, 0, 0.525],
+              118: [0, 0.43056, 0, 0, 0.525],
+              119: [0, 0.43056, 0, 0, 0.525],
+              120: [0, 0.43056, 0, 0, 0.525],
+              121: [0.22222, 0.43056, 0, 0, 0.525],
+              122: [0, 0.43056, 0, 0, 0.525],
+              123: [0.08333, 0.69444, 0, 0, 0.525],
+              124: [0.08333, 0.69444, 0, 0, 0.525],
+              125: [0.08333, 0.69444, 0, 0, 0.525],
+              126: [0, 0.61111, 0, 0, 0.525],
+              127: [0, 0.61111, 0, 0, 0.525],
+              160: [0, 0, 0, 0, 0.525],
+              176: [0, 0.61111, 0, 0, 0.525],
+              184: [0.19445, 0, 0, 0, 0.525],
+              305: [0, 0.43056, 0, 0, 0.525],
+              567: [0.22222, 0.43056, 0, 0, 0.525],
+              711: [0, 0.56597, 0, 0, 0.525],
+              713: [0, 0.56555, 0, 0, 0.525],
+              714: [0, 0.61111, 0, 0, 0.525],
+              715: [0, 0.61111, 0, 0, 0.525],
+              728: [0, 0.61111, 0, 0, 0.525],
+              730: [0, 0.61111, 0, 0, 0.525],
+              770: [0, 0.61111, 0, 0, 0.525],
+              771: [0, 0.61111, 0, 0, 0.525],
+              776: [0, 0.61111, 0, 0, 0.525],
+              915: [0, 0.61111, 0, 0, 0.525],
+              916: [0, 0.61111, 0, 0, 0.525],
+              920: [0, 0.61111, 0, 0, 0.525],
+              923: [0, 0.61111, 0, 0, 0.525],
+              926: [0, 0.61111, 0, 0, 0.525],
+              928: [0, 0.61111, 0, 0, 0.525],
+              931: [0, 0.61111, 0, 0, 0.525],
+              933: [0, 0.61111, 0, 0, 0.525],
+              934: [0, 0.61111, 0, 0, 0.525],
+              936: [0, 0.61111, 0, 0, 0.525],
+              937: [0, 0.61111, 0, 0, 0.525],
+              8216: [0, 0.61111, 0, 0, 0.525],
+              8217: [0, 0.61111, 0, 0, 0.525],
+              8242: [0, 0.61111, 0, 0, 0.525],
+              9251: [0.11111, 0.21944, 0, 0, 0.525]
+            }
+          };
+          const Q0 = {
+            slant: [0.25, 0.25, 0.25],
+            // sigma1
+            space: [0, 0, 0],
+            // sigma2
+            stretch: [0, 0, 0],
+            // sigma3
+            shrink: [0, 0, 0],
+            // sigma4
+            xHeight: [0.431, 0.431, 0.431],
+            // sigma5
+            quad: [1, 1.171, 1.472],
+            // sigma6
+            extraSpace: [0, 0, 0],
+            // sigma7
+            num1: [0.677, 0.732, 0.925],
+            // sigma8
+            num2: [0.394, 0.384, 0.387],
+            // sigma9
+            num3: [0.444, 0.471, 0.504],
+            // sigma10
+            denom1: [0.686, 0.752, 1.025],
+            // sigma11
+            denom2: [0.345, 0.344, 0.532],
+            // sigma12
+            sup1: [0.413, 0.503, 0.504],
+            // sigma13
+            sup2: [0.363, 0.431, 0.404],
+            // sigma14
+            sup3: [0.289, 0.286, 0.294],
+            // sigma15
+            sub1: [0.15, 0.143, 0.2],
+            // sigma16
+            sub2: [0.247, 0.286, 0.4],
+            // sigma17
+            supDrop: [0.386, 0.353, 0.494],
+            // sigma18
+            subDrop: [0.05, 0.071, 0.1],
+            // sigma19
+            delim1: [2.39, 1.7, 1.98],
+            // sigma20
+            delim2: [1.01, 1.157, 1.42],
+            // sigma21
+            axisHeight: [0.25, 0.25, 0.25],
+            // sigma22
+            // These font metrics are extracted from TeX by using tftopl on cmex10.tfm;
+            // they correspond to the font parameters of the extension fonts (family 3).
+            // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to
+            // match cmex7, we'd use cmex7.tfm values for script and scriptscript
+            // values.
+            defaultRuleThickness: [0.04, 0.049, 0.049],
+            // xi8; cmex7: 0.049
+            bigOpSpacing1: [0.111, 0.111, 0.111],
+            // xi9
+            bigOpSpacing2: [0.166, 0.166, 0.166],
+            // xi10
+            bigOpSpacing3: [0.2, 0.2, 0.2],
+            // xi11
+            bigOpSpacing4: [0.6, 0.611, 0.611],
+            // xi12; cmex7: 0.611
+            bigOpSpacing5: [0.1, 0.143, 0.143],
+            // xi13; cmex7: 0.143
+            // The \sqrt rule width is taken from the height of the surd character.
+            // Since we use the same font at all sizes, this thickness doesn't scale.
+            sqrtRuleThickness: [0.04, 0.04, 0.04],
+            // This value determines how large a pt is, for metrics which are defined
+            // in terms of pts.
+            // This value is also used in katex.less; if you change it make sure the
+            // values match.
+            ptPerEm: [10, 10, 10],
+            // The space between adjacent `|` columns in an array definition. From
+            // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm.
+            doubleRuleSep: [0.2, 0.2, 0.2],
+            // The width of separator lines in {array} environments. From
+            // `\showthe\arrayrulewidth` in LaTeX. Equals 0.4 / ptPerEm.
+            arrayRuleWidth: [0.04, 0.04, 0.04],
+            // Two values from LaTeX source2e:
+            fboxsep: [0.3, 0.3, 0.3],
+            //        3 pt / ptPerEm
+            fboxrule: [0.04, 0.04, 0.04]
+            // 0.4 pt / ptPerEm
+          }, J0 = {
+            // Latin-1
+            Å: "A",
+            Ð: "D",
+            Þ: "o",
+            å: "a",
+            ð: "d",
+            þ: "o",
+            // Cyrillic
+            А: "A",
+            Б: "B",
+            В: "B",
+            Г: "F",
+            Д: "A",
+            Е: "E",
+            Ж: "K",
+            З: "3",
+            И: "N",
+            Й: "N",
+            К: "K",
+            Л: "N",
+            М: "M",
+            Н: "H",
+            О: "O",
+            П: "N",
+            Р: "P",
+            С: "C",
+            Т: "T",
+            У: "y",
+            Ф: "O",
+            Х: "X",
+            Ц: "U",
+            Ч: "h",
+            Ш: "W",
+            Щ: "W",
+            Ъ: "B",
+            Ы: "X",
+            Ь: "B",
+            Э: "3",
+            Ю: "X",
+            Я: "R",
+            а: "a",
+            б: "b",
+            в: "a",
+            г: "r",
+            д: "y",
+            е: "e",
+            ж: "m",
+            з: "e",
+            и: "n",
+            й: "n",
+            к: "n",
+            л: "n",
+            м: "m",
+            н: "n",
+            о: "o",
+            п: "n",
+            р: "p",
+            с: "c",
+            т: "o",
+            у: "y",
+            ф: "b",
+            х: "x",
+            ц: "n",
+            ч: "n",
+            ш: "w",
+            щ: "w",
+            ъ: "a",
+            ы: "m",
+            ь: "a",
+            э: "e",
+            ю: "m",
+            я: "r"
+          };
+          function O0(t, e) {
+            gt[t] = e;
+          }
+          function Wt(t, e, n) {
+            if (!gt[e])
+              throw new Error("Font metrics not found for font: " + e + ".");
+            let l = t.charCodeAt(0), c = gt[e][l];
+            if (!c && t[0] in J0 && (l = J0[t[0]].charCodeAt(0), c = gt[e][l]), !c && n === "text" && tt(l) && (c = gt[e][77]), c)
+              return {
+                depth: c[0],
+                height: c[1],
+                italic: c[2],
+                skew: c[3],
+                width: c[4]
+              };
+          }
+          const jt = {};
+          function Rn(t) {
+            let e;
+            if (t >= 5 ? e = 0 : t >= 3 ? e = 1 : e = 2, !jt[e]) {
+              const n = jt[e] = {
+                cssEmPerMu: Q0.quad[e] / 18
+              };
+              for (const l in Q0)
+                Q0.hasOwnProperty(l) && (n[l] = Q0[l][e]);
+            }
+            return jt[e];
+          }
+          const In = [
+            // Each element contains [textsize, scriptsize, scriptscriptsize].
+            // The size mappings are taken from TeX with \normalsize=10pt.
+            [1, 1, 1],
+            // size1: [5, 5, 5]              \tiny
+            [2, 1, 1],
+            // size2: [6, 5, 5]
+            [3, 1, 1],
+            // size3: [7, 5, 5]              \scriptsize
+            [4, 2, 1],
+            // size4: [8, 6, 5]              \footnotesize
+            [5, 2, 1],
+            // size5: [9, 6, 5]              \small
+            [6, 3, 1],
+            // size6: [10, 7, 5]             \normalsize
+            [7, 4, 2],
+            // size7: [12, 8, 6]             \large
+            [8, 6, 3],
+            // size8: [14.4, 10, 7]          \Large
+            [9, 7, 6],
+            // size9: [17.28, 12, 10]        \LARGE
+            [10, 8, 7],
+            // size10: [20.74, 14.4, 12]     \huge
+            [11, 10, 9]
+            // size11: [24.88, 20.74, 17.28] \HUGE
+          ], gn = [
+            // fontMetrics.js:getGlobalMetrics also uses size indexes, so if
+            // you change size indexes, change that function.
+            0.5,
+            0.6,
+            0.7,
+            0.8,
+            0.9,
+            1,
+            1.2,
+            1.44,
+            1.728,
+            2.074,
+            2.488
+          ], $0 = function(t, e) {
+            return e.size < 2 ? t : In[t - 1][e.size - 1];
+          };
+          class At {
+            // A font family applies to a group of fonts (i.e. SansSerif), while a font
+            // represents a specific font (i.e. SansSerif Bold).
+            // See: https://tex.stackexchange.com/questions/22350/difference-between-textrm-and-mathrm
+            /**
+             * The base size index.
+             */
+            constructor(e) {
+              this.style = void 0, this.color = void 0, this.size = void 0, this.textSize = void 0, this.phantom = void 0, this.font = void 0, this.fontFamily = void 0, this.fontWeight = void 0, this.fontShape = void 0, this.sizeMultiplier = void 0, this.maxSize = void 0, this.minRuleThickness = void 0, this._fontMetrics = void 0, this.style = e.style, this.color = e.color, this.size = e.size || At.BASESIZE, this.textSize = e.textSize || this.size, this.phantom = !!e.phantom, this.font = e.font || "", this.fontFamily = e.fontFamily || "", this.fontWeight = e.fontWeight || "", this.fontShape = e.fontShape || "", this.sizeMultiplier = gn[this.size - 1], this.maxSize = e.maxSize, this.minRuleThickness = e.minRuleThickness, this._fontMetrics = void 0;
+            }
+            /**
+             * Returns a new options object with the same properties as "this".  Properties
+             * from "extension" will be copied to the new options object.
+             */
+            extend(e) {
+              const n = {
+                style: this.style,
+                size: this.size,
+                textSize: this.textSize,
+                color: this.color,
+                phantom: this.phantom,
+                font: this.font,
+                fontFamily: this.fontFamily,
+                fontWeight: this.fontWeight,
+                fontShape: this.fontShape,
+                maxSize: this.maxSize,
+                minRuleThickness: this.minRuleThickness
+              };
+              for (const l in e)
+                e.hasOwnProperty(l) && (n[l] = e[l]);
+              return new At(n);
+            }
+            /**
+             * Return an options object with the given style. If `this.style === style`,
+             * returns `this`.
+             */
+            havingStyle(e) {
+              return this.style === e ? this : this.extend({
+                style: e,
+                size: $0(this.textSize, e)
+              });
+            }
+            /**
+             * Return an options object with a cramped version of the current style. If
+             * the current style is cramped, returns `this`.
+             */
+            havingCrampedStyle() {
+              return this.havingStyle(this.style.cramp());
+            }
+            /**
+             * Return an options object with the given size and in at least `\textstyle`.
+             * Returns `this` if appropriate.
+             */
+            havingSize(e) {
+              return this.size === e && this.textSize === e ? this : this.extend({
+                style: this.style.text(),
+                size: e,
+                textSize: e,
+                sizeMultiplier: gn[e - 1]
+              });
+            }
+            /**
+             * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted,
+             * changes to at least `\textstyle`.
+             */
+            havingBaseStyle(e) {
+              e = e || this.style.text();
+              const n = $0(At.BASESIZE, e);
+              return this.size === n && this.textSize === At.BASESIZE && this.style === e ? this : this.extend({
+                style: e,
+                size: n
+              });
+            }
+            /**
+             * Remove the effect of sizing changes such as \Huge.
+             * Keep the effect of the current style, such as \scriptstyle.
+             */
+            havingBaseSizing() {
+              let e;
+              switch (this.style.id) {
+                case 4:
+                case 5:
+                  e = 3;
+                  break;
+                case 6:
+                case 7:
+                  e = 1;
+                  break;
+                default:
+                  e = 6;
+              }
+              return this.extend({
+                style: this.style.text(),
+                size: e
+              });
+            }
+            /**
+             * Create a new options object with the given color.
+             */
+            withColor(e) {
+              return this.extend({
+                color: e
+              });
+            }
+            /**
+             * Create a new options object with "phantom" set to true.
+             */
+            withPhantom() {
+              return this.extend({
+                phantom: !0
+              });
+            }
+            /**
+             * Creates a new options object with the given math font or old text font.
+             * @type {[type]}
+             */
+            withFont(e) {
+              return this.extend({
+                font: e
+              });
+            }
+            /**
+             * Create a new options objects with the given fontFamily.
+             */
+            withTextFontFamily(e) {
+              return this.extend({
+                fontFamily: e,
+                font: ""
+              });
+            }
+            /**
+             * Creates a new options object with the given font weight
+             */
+            withTextFontWeight(e) {
+              return this.extend({
+                fontWeight: e,
+                font: ""
+              });
+            }
+            /**
+             * Creates a new options object with the given font weight
+             */
+            withTextFontShape(e) {
+              return this.extend({
+                fontShape: e,
+                font: ""
+              });
+            }
+            /**
+             * Return the CSS sizing classes required to switch from enclosing options
+             * `oldOptions` to `this`. Returns an array of classes.
+             */
+            sizingClasses(e) {
+              return e.size !== this.size ? ["sizing", "reset-size" + e.size, "size" + this.size] : [];
+            }
+            /**
+             * Return the CSS sizing classes required to switch to the base size. Like
+             * `this.havingSize(BASESIZE).sizingClasses(this)`.
+             */
+            baseSizingClasses() {
+              return this.size !== At.BASESIZE ? ["sizing", "reset-size" + this.size, "size" + At.BASESIZE] : [];
+            }
+            /**
+             * Return the font metrics for this size.
+             */
+            fontMetrics() {
+              return this._fontMetrics || (this._fontMetrics = Rn(this.size)), this._fontMetrics;
+            }
+            /**
+             * Gets the CSS color of the current options object
+             */
+            getColor() {
+              return this.phantom ? "transparent" : this.color;
+            }
+          }
+          At.BASESIZE = 6;
+          var en = At;
+          const y0 = {
+            // https://en.wikibooks.org/wiki/LaTeX/Lengths and
+            // https://tex.stackexchange.com/a/8263
+            pt: 1,
+            // TeX point
+            mm: 7227 / 2540,
+            // millimeter
+            cm: 7227 / 254,
+            // centimeter
+            in: 72.27,
+            // inch
+            bp: 803 / 800,
+            // big (PostScript) points
+            pc: 12,
+            // pica
+            dd: 1238 / 1157,
+            // didot
+            cc: 14856 / 1157,
+            // cicero (12 didot)
+            nd: 685 / 642,
+            // new didot
+            nc: 1370 / 107,
+            // new cicero (12 new didot)
+            sp: 1 / 65536,
+            // scaled point (TeX's internal smallest unit)
+            // https://tex.stackexchange.com/a/41371
+            px: 803 / 800
+            // \pdfpxdimen defaults to 1 bp in pdfTeX and LuaTeX
+          }, qt = {
+            ex: !0,
+            em: !0,
+            mu: !0
+          }, u0 = function(t) {
+            return typeof t != "string" && (t = t.unit), t in y0 || t in qt || t === "ex";
+          }, Ne = function(t, e) {
+            let n;
+            if (t.unit in y0)
+              n = y0[t.unit] / e.fontMetrics().ptPerEm / e.sizeMultiplier;
+            else if (t.unit === "mu")
+              n = e.fontMetrics().cssEmPerMu;
+            else {
+              let l;
+              if (e.style.isTight() ? l = e.havingStyle(e.style.text()) : l = e, t.unit === "ex")
+                n = l.fontMetrics().xHeight;
+              else if (t.unit === "em")
+                n = l.fontMetrics().quad;
+              else
+                throw new u("Invalid unit: '" + t.unit + "'");
+              l !== e && (n *= l.sizeMultiplier / e.sizeMultiplier);
+            }
+            return Math.min(t.number * n, e.maxSize);
+          }, $ = function(t) {
+            return +t.toFixed(4) + "em";
+          }, Xt = function(t) {
+            return t.filter((e) => e).join(" ");
+          }, _0 = function(t, e, n) {
+            if (this.classes = t || [], this.attributes = {}, this.height = 0, this.depth = 0, this.maxFontSize = 0, this.style = n || {}, e) {
+              e.style.isTight() && this.classes.push("mtight");
+              const l = e.getColor();
+              l && (this.style.color = l);
+            }
+          }, Ln = function(t) {
+            const e = document.createElement(t);
+            e.className = Xt(this.classes);
+            for (const n in this.style)
+              this.style.hasOwnProperty(n) && (e.style[n] = this.style[n]);
+            for (const n in this.attributes)
+              this.attributes.hasOwnProperty(n) && e.setAttribute(n, this.attributes[n]);
+            for (let n = 0; n < this.children.length; n++)
+              e.appendChild(this.children[n].toNode());
+            return e;
+          }, On = function(t) {
+            let e = "<" + t;
+            this.classes.length && (e += ' class="' + R.escape(Xt(this.classes)) + '"');
+            let n = "";
+            for (const l in this.style)
+              this.style.hasOwnProperty(l) && (n += R.hyphenate(l) + ":" + this.style[l] + ";");
+            n && (e += ' style="' + R.escape(n) + '"');
+            for (const l in this.attributes)
+              this.attributes.hasOwnProperty(l) && (e += " " + l + '="' + R.escape(this.attributes[l]) + '"');
+            e += ">";
+            for (let l = 0; l < this.children.length; l++)
+              e += this.children[l].toMarkup();
+            return e += "</" + t + ">", e;
+          };
+          class Ge {
+            constructor(e, n, l, c) {
+              this.children = void 0, this.attributes = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.width = void 0, this.maxFontSize = void 0, this.style = void 0, _0.call(this, e, l, c), this.children = n || [];
+            }
+            /**
+             * Sets an arbitrary attribute on the span. Warning: use this wisely. Not
+             * all browsers support attributes the same, and having too many custom
+             * attributes is probably bad.
+             */
+            setAttribute(e, n) {
+              this.attributes[e] = n;
+            }
+            hasClass(e) {
+              return R.contains(this.classes, e);
+            }
+            toNode() {
+              return Ln.call(this, "span");
+            }
+            toMarkup() {
+              return On.call(this, "span");
+            }
+          }
+          class Yt {
+            constructor(e, n, l, c) {
+              this.children = void 0, this.attributes = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, _0.call(this, n, c), this.children = l || [], this.setAttribute("href", e);
+            }
+            setAttribute(e, n) {
+              this.attributes[e] = n;
+            }
+            hasClass(e) {
+              return R.contains(this.classes, e);
+            }
+            toNode() {
+              return Ln.call(this, "a");
+            }
+            toMarkup() {
+              return On.call(this, "a");
+            }
+          }
+          class Tr {
+            constructor(e, n, l) {
+              this.src = void 0, this.alt = void 0, this.classes = void 0, this.height = void 0, this.depth = void 0, this.maxFontSize = void 0, this.style = void 0, this.alt = n, this.src = e, this.classes = ["mord"], this.style = l;
+            }
+            hasClass(e) {
+              return R.contains(this.classes, e);
+            }
+            toNode() {
+              const e = document.createElement("img");
+              e.src = this.src, e.alt = this.alt, e.className = "mord";
+              for (const n in this.style)
+                this.style.hasOwnProperty(n) && (e.style[n] = this.style[n]);
+              return e;
+            }
+            toMarkup() {
+              let e = '<img src="' + R.escape(this.src) + '"' + (' alt="' + R.escape(this.alt) + '"'), n = "";
+              for (const l in this.style)
+                this.style.hasOwnProperty(l) && (n += R.hyphenate(l) + ":" + this.style[l] + ";");
+              return n && (e += ' style="' + R.escape(n) + '"'), e += "'/>", e;
+            }
+          }
+          const qn = {
+            î: "ı̂",
+            ï: "ı̈",
+            í: "ı́",
+            // 'ī': '\u0131\u0304', // enable when we add Extended Latin
+            ì: "ı̀"
+          };
+          class st {
+            constructor(e, n, l, c, m, b, _, x) {
+              this.text = void 0, this.height = void 0, this.depth = void 0, this.italic = void 0, this.skew = void 0, this.width = void 0, this.maxFontSize = void 0, this.classes = void 0, this.style = void 0, this.text = e, this.height = n || 0, this.depth = l || 0, this.italic = c || 0, this.skew = m || 0, this.width = b || 0, this.classes = _ || [], this.style = x || {}, this.maxFontSize = 0;
+              const F = ie(this.text.charCodeAt(0));
+              F && this.classes.push(F + "_fallback"), /[îïíì]/.test(this.text) && (this.text = qn[this.text]);
+            }
+            hasClass(e) {
+              return R.contains(this.classes, e);
+            }
+            /**
+             * Creates a text node or span from a symbol node. Note that a span is only
+             * created if it is needed.
+             */
+            toNode() {
+              const e = document.createTextNode(this.text);
+              let n = null;
+              this.italic > 0 && (n = document.createElement("span"), n.style.marginRight = $(this.italic)), this.classes.length > 0 && (n = n || document.createElement("span"), n.className = Xt(this.classes));
+              for (const l in this.style)
+                this.style.hasOwnProperty(l) && (n = n || document.createElement("span"), n.style[l] = this.style[l]);
+              return n ? (n.appendChild(e), n) : e;
+            }
+            /**
+             * Creates markup for a symbol node.
+             */
+            toMarkup() {
+              let e = !1, n = "<span";
+              this.classes.length && (e = !0, n += ' class="', n += R.escape(Xt(this.classes)), n += '"');
+              let l = "";
+              this.italic > 0 && (l += "margin-right:" + this.italic + "em;");
+              for (const m in this.style)
+                this.style.hasOwnProperty(m) && (l += R.hyphenate(m) + ":" + this.style[m] + ";");
+              l && (e = !0, n += ' style="' + R.escape(l) + '"');
+              const c = R.escape(this.text);
+              return e ? (n += ">", n += c, n += "</span>", n) : c;
+            }
+          }
+          class St {
+            constructor(e, n) {
+              this.children = void 0, this.attributes = void 0, this.children = e || [], this.attributes = n || {};
+            }
+            toNode() {
+              const n = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+              for (const l in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, l) && n.setAttribute(l, this.attributes[l]);
+              for (let l = 0; l < this.children.length; l++)
+                n.appendChild(this.children[l].toNode());
+              return n;
+            }
+            toMarkup() {
+              let e = '<svg xmlns="http://www.w3.org/2000/svg"';
+              for (const n in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="' + R.escape(this.attributes[n]) + '"');
+              e += ">";
+              for (let n = 0; n < this.children.length; n++)
+                e += this.children[n].toMarkup();
+              return e += "</svg>", e;
+            }
+          }
+          class Pt {
+            constructor(e, n) {
+              this.pathName = void 0, this.alternate = void 0, this.pathName = e, this.alternate = n;
+            }
+            toNode() {
+              const n = document.createElementNS("http://www.w3.org/2000/svg", "path");
+              return this.alternate ? n.setAttribute("d", this.alternate) : n.setAttribute("d", L0[this.pathName]), n;
+            }
+            toMarkup() {
+              return this.alternate ? '<path d="' + R.escape(this.alternate) + '"/>' : '<path d="' + R.escape(L0[this.pathName]) + '"/>';
+            }
+          }
+          class bn {
+            constructor(e) {
+              this.attributes = void 0, this.attributes = e || {};
+            }
+            toNode() {
+              const n = document.createElementNS("http://www.w3.org/2000/svg", "line");
+              for (const l in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, l) && n.setAttribute(l, this.attributes[l]);
+              return n;
+            }
+            toMarkup() {
+              let e = "<line";
+              for (const n in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="' + R.escape(this.attributes[n]) + '"');
+              return e += "/>", e;
+            }
+          }
+          function wn(t) {
+            if (t instanceof st)
+              return t;
+            throw new Error("Expected symbolNode but got " + String(t) + ".");
+          }
+          function Pn(t) {
+            if (t instanceof Ge)
+              return t;
+            throw new Error("Expected span<HtmlDomNode> but got " + String(t) + ".");
+          }
+          const Mr = {
+            bin: 1,
+            close: 1,
+            inner: 1,
+            open: 1,
+            punct: 1,
+            rel: 1
+          }, Zt = {
+            "accent-token": 1,
+            mathord: 1,
+            "op-token": 1,
+            spacing: 1,
+            textord: 1
+          }, k0 = {
+            math: {},
+            text: {}
+          };
+          var Le = k0;
+          function h(t, e, n, l, c, m) {
+            k0[t][c] = {
+              font: e,
+              group: n,
+              replace: l
+            }, m && l && (k0[t][l] = k0[t][c]);
+          }
+          const d = "math", V = "text", w = "main", A = "ams", Re = "accent-token", re = "bin", nt = "close", x0 = "inner", G = "mathord", C = "op-token", j = "open", le = "punct", v = "rel", Oe = "spacing", E = "textord";
+          h(d, w, v, "≡", "\\equiv", !0), h(d, w, v, "≺", "\\prec", !0), h(d, w, v, "≻", "\\succ", !0), h(d, w, v, "∼", "\\sim", !0), h(d, w, v, "⊥", "\\perp"), h(d, w, v, "⪯", "\\preceq", !0), h(d, w, v, "⪰", "\\succeq", !0), h(d, w, v, "≃", "\\simeq", !0), h(d, w, v, "∣", "\\mid", !0), h(d, w, v, "≪", "\\ll", !0), h(d, w, v, "≫", "\\gg", !0), h(d, w, v, "≍", "\\asymp", !0), h(d, w, v, "∥", "\\parallel"), h(d, w, v, "⋈", "\\bowtie", !0), h(d, w, v, "⌣", "\\smile", !0), h(d, w, v, "⊑", "\\sqsubseteq", !0), h(d, w, v, "⊒", "\\sqsupseteq", !0), h(d, w, v, "≐", "\\doteq", !0), h(d, w, v, "⌢", "\\frown", !0), h(d, w, v, "∋", "\\ni", !0), h(d, w, v, "∝", "\\propto", !0), h(d, w, v, "⊢", "\\vdash", !0), h(d, w, v, "⊣", "\\dashv", !0), h(d, w, v, "∋", "\\owns"), h(d, w, le, ".", "\\ldotp"), h(d, w, le, "⋅", "\\cdotp"), h(d, w, E, "#", "\\#"), h(V, w, E, "#", "\\#"), h(d, w, E, "&", "\\&"), h(V, w, E, "&", "\\&"), h(d, w, E, "ℵ", "\\aleph", !0), h(d, w, E, "∀", "\\forall", !0), h(d, w, E, "ℏ", "\\hbar", !0), h(d, w, E, "∃", "\\exists", !0), h(d, w, E, "∇", "\\nabla", !0), h(d, w, E, "♭", "\\flat", !0), h(d, w, E, "ℓ", "\\ell", !0), h(d, w, E, "♮", "\\natural", !0), h(d, w, E, "♣", "\\clubsuit", !0), h(d, w, E, "℘", "\\wp", !0), h(d, w, E, "♯", "\\sharp", !0), h(d, w, E, "♢", "\\diamondsuit", !0), h(d, w, E, "ℜ", "\\Re", !0), h(d, w, E, "♡", "\\heartsuit", !0), h(d, w, E, "ℑ", "\\Im", !0), h(d, w, E, "♠", "\\spadesuit", !0), h(d, w, E, "§", "\\S", !0), h(V, w, E, "§", "\\S"), h(d, w, E, "¶", "\\P", !0), h(V, w, E, "¶", "\\P"), h(d, w, E, "†", "\\dag"), h(V, w, E, "†", "\\dag"), h(V, w, E, "†", "\\textdagger"), h(d, w, E, "‡", "\\ddag"), h(V, w, E, "‡", "\\ddag"), h(V, w, E, "‡", "\\textdaggerdbl"), h(d, w, nt, "⎱", "\\rmoustache", !0), h(d, w, j, "⎰", "\\lmoustache", !0), h(d, w, nt, "⟯", "\\rgroup", !0), h(d, w, j, "⟮", "\\lgroup", !0), h(d, w, re, "∓", "\\mp", !0), h(d, w, re, "⊖", "\\ominus", !0), h(d, w, re, "⊎", "\\uplus", !0), h(d, w, re, "⊓", "\\sqcap", !0), h(d, w, re, "∗", "\\ast"), h(d, w, re, "⊔", "\\sqcup", !0), h(d, w, re, "◯", "\\bigcirc", !0), h(d, w, re, "∙", "\\bullet", !0), h(d, w, re, "‡", "\\ddagger"), h(d, w, re, "≀", "\\wr", !0), h(d, w, re, "⨿", "\\amalg"), h(d, w, re, "&", "\\And"), h(d, w, v, "⟵", "\\longleftarrow", !0), h(d, w, v, "⇐", "\\Leftarrow", !0), h(d, w, v, "⟸", "\\Longleftarrow", !0), h(d, w, v, "⟶", "\\longrightarrow", !0), h(d, w, v, "⇒", "\\Rightarrow", !0), h(d, w, v, "⟹", "\\Longrightarrow", !0), h(d, w, v, "↔", "\\leftrightarrow", !0), h(d, w, v, "⟷", "\\longleftrightarrow", !0), h(d, w, v, "⇔", "\\Leftrightarrow", !0), h(d, w, v, "⟺", "\\Longleftrightarrow", !0), h(d, w, v, "↦", "\\mapsto", !0), h(d, w, v, "⟼", "\\longmapsto", !0), h(d, w, v, "↗", "\\nearrow", !0), h(d, w, v, "↩", "\\hookleftarrow", !0), h(d, w, v, "↪", "\\hookrightarrow", !0), h(d, w, v, "↘", "\\searrow", !0), h(d, w, v, "↼", "\\leftharpoonup", !0), h(d, w, v, "⇀", "\\rightharpoonup", !0), h(d, w, v, "↙", "\\swarrow", !0), h(d, w, v, "↽", "\\leftharpoondown", !0), h(d, w, v, "⇁", "\\rightharpoondown", !0), h(d, w, v, "↖", "\\nwarrow", !0), h(d, w, v, "⇌", "\\rightleftharpoons", !0), h(d, A, v, "≮", "\\nless", !0), h(d, A, v, "", "\\@nleqslant"), h(d, A, v, "", "\\@nleqq"), h(d, A, v, "⪇", "\\lneq", !0), h(d, A, v, "≨", "\\lneqq", !0), h(d, A, v, "", "\\@lvertneqq"), h(d, A, v, "⋦", "\\lnsim", !0), h(d, A, v, "⪉", "\\lnapprox", !0), h(d, A, v, "⊀", "\\nprec", !0), h(d, A, v, "⋠", "\\npreceq", !0), h(d, A, v, "⋨", "\\precnsim", !0), h(d, A, v, "⪹", "\\precnapprox", !0), h(d, A, v, "≁", "\\nsim", !0), h(d, A, v, "", "\\@nshortmid"), h(d, A, v, "∤", "\\nmid", !0), h(d, A, v, "⊬", "\\nvdash", !0), h(d, A, v, "⊭", "\\nvDash", !0), h(d, A, v, "⋪", "\\ntriangleleft"), h(d, A, v, "⋬", "\\ntrianglelefteq", !0), h(d, A, v, "⊊", "\\subsetneq", !0), h(d, A, v, "", "\\@varsubsetneq"), h(d, A, v, "⫋", "\\subsetneqq", !0), h(d, A, v, "", "\\@varsubsetneqq"), h(d, A, v, "≯", "\\ngtr", !0), h(d, A, v, "", "\\@ngeqslant"), h(d, A, v, "", "\\@ngeqq"), h(d, A, v, "⪈", "\\gneq", !0), h(d, A, v, "≩", "\\gneqq", !0), h(d, A, v, "", "\\@gvertneqq"), h(d, A, v, "⋧", "\\gnsim", !0), h(d, A, v, "⪊", "\\gnapprox", !0), h(d, A, v, "⊁", "\\nsucc", !0), h(d, A, v, "⋡", "\\nsucceq", !0), h(d, A, v, "⋩", "\\succnsim", !0), h(d, A, v, "⪺", "\\succnapprox", !0), h(d, A, v, "≆", "\\ncong", !0), h(d, A, v, "", "\\@nshortparallel"), h(d, A, v, "∦", "\\nparallel", !0), h(d, A, v, "⊯", "\\nVDash", !0), h(d, A, v, "⋫", "\\ntriangleright"), h(d, A, v, "⋭", "\\ntrianglerighteq", !0), h(d, A, v, "", "\\@nsupseteqq"), h(d, A, v, "⊋", "\\supsetneq", !0), h(d, A, v, "", "\\@varsupsetneq"), h(d, A, v, "⫌", "\\supsetneqq", !0), h(d, A, v, "", "\\@varsupsetneqq"), h(d, A, v, "⊮", "\\nVdash", !0), h(d, A, v, "⪵", "\\precneqq", !0), h(d, A, v, "⪶", "\\succneqq", !0), h(d, A, v, "", "\\@nsubseteqq"), h(d, A, re, "⊴", "\\unlhd"), h(d, A, re, "⊵", "\\unrhd"), h(d, A, v, "↚", "\\nleftarrow", !0), h(d, A, v, "↛", "\\nrightarrow", !0), h(d, A, v, "⇍", "\\nLeftarrow", !0), h(d, A, v, "⇏", "\\nRightarrow", !0), h(d, A, v, "↮", "\\nleftrightarrow", !0), h(d, A, v, "⇎", "\\nLeftrightarrow", !0), h(d, A, v, "△", "\\vartriangle"), h(d, A, E, "ℏ", "\\hslash"), h(d, A, E, "▽", "\\triangledown"), h(d, A, E, "◊", "\\lozenge"), h(d, A, E, "Ⓢ", "\\circledS"), h(d, A, E, "®", "\\circledR"), h(V, A, E, "®", "\\circledR"), h(d, A, E, "∡", "\\measuredangle", !0), h(d, A, E, "∄", "\\nexists"), h(d, A, E, "℧", "\\mho"), h(d, A, E, "Ⅎ", "\\Finv", !0), h(d, A, E, "⅁", "\\Game", !0), h(d, A, E, "‵", "\\backprime"), h(d, A, E, "▲", "\\blacktriangle"), h(d, A, E, "▼", "\\blacktriangledown"), h(d, A, E, "■", "\\blacksquare"), h(d, A, E, "⧫", "\\blacklozenge"), h(d, A, E, "★", "\\bigstar"), h(d, A, E, "∢", "\\sphericalangle", !0), h(d, A, E, "∁", "\\complement", !0), h(d, A, E, "ð", "\\eth", !0), h(V, w, E, "ð", "ð"), h(d, A, E, "╱", "\\diagup"), h(d, A, E, "╲", "\\diagdown"), h(d, A, E, "□", "\\square"), h(d, A, E, "□", "\\Box"), h(d, A, E, "◊", "\\Diamond"), h(d, A, E, "¥", "\\yen", !0), h(V, A, E, "¥", "\\yen", !0), h(d, A, E, "✓", "\\checkmark", !0), h(V, A, E, "✓", "\\checkmark"), h(d, A, E, "ℶ", "\\beth", !0), h(d, A, E, "ℸ", "\\daleth", !0), h(d, A, E, "ℷ", "\\gimel", !0), h(d, A, E, "ϝ", "\\digamma", !0), h(d, A, E, "ϰ", "\\varkappa"), h(d, A, j, "┌", "\\@ulcorner", !0), h(d, A, nt, "┐", "\\@urcorner", !0), h(d, A, j, "└", "\\@llcorner", !0), h(d, A, nt, "┘", "\\@lrcorner", !0), h(d, A, v, "≦", "\\leqq", !0), h(d, A, v, "⩽", "\\leqslant", !0), h(d, A, v, "⪕", "\\eqslantless", !0), h(d, A, v, "≲", "\\lesssim", !0), h(d, A, v, "⪅", "\\lessapprox", !0), h(d, A, v, "≊", "\\approxeq", !0), h(d, A, re, "⋖", "\\lessdot"), h(d, A, v, "⋘", "\\lll", !0), h(d, A, v, "≶", "\\lessgtr", !0), h(d, A, v, "⋚", "\\lesseqgtr", !0), h(d, A, v, "⪋", "\\lesseqqgtr", !0), h(d, A, v, "≑", "\\doteqdot"), h(d, A, v, "≓", "\\risingdotseq", !0), h(d, A, v, "≒", "\\fallingdotseq", !0), h(d, A, v, "∽", "\\backsim", !0), h(d, A, v, "⋍", "\\backsimeq", !0), h(d, A, v, "⫅", "\\subseteqq", !0), h(d, A, v, "⋐", "\\Subset", !0), h(d, A, v, "⊏", "\\sqsubset", !0), h(d, A, v, "≼", "\\preccurlyeq", !0), h(d, A, v, "⋞", "\\curlyeqprec", !0), h(d, A, v, "≾", "\\precsim", !0), h(d, A, v, "⪷", "\\precapprox", !0), h(d, A, v, "⊲", "\\vartriangleleft"), h(d, A, v, "⊴", "\\trianglelefteq"), h(d, A, v, "⊨", "\\vDash", !0), h(d, A, v, "⊪", "\\Vvdash", !0), h(d, A, v, "⌣", "\\smallsmile"), h(d, A, v, "⌢", "\\smallfrown"), h(d, A, v, "≏", "\\bumpeq", !0), h(d, A, v, "≎", "\\Bumpeq", !0), h(d, A, v, "≧", "\\geqq", !0), h(d, A, v, "⩾", "\\geqslant", !0), h(d, A, v, "⪖", "\\eqslantgtr", !0), h(d, A, v, "≳", "\\gtrsim", !0), h(d, A, v, "⪆", "\\gtrapprox", !0), h(d, A, re, "⋗", "\\gtrdot"), h(d, A, v, "⋙", "\\ggg", !0), h(d, A, v, "≷", "\\gtrless", !0), h(d, A, v, "⋛", "\\gtreqless", !0), h(d, A, v, "⪌", "\\gtreqqless", !0), h(d, A, v, "≖", "\\eqcirc", !0), h(d, A, v, "≗", "\\circeq", !0), h(d, A, v, "≜", "\\triangleq", !0), h(d, A, v, "∼", "\\thicksim"), h(d, A, v, "≈", "\\thickapprox"), h(d, A, v, "⫆", "\\supseteqq", !0), h(d, A, v, "⋑", "\\Supset", !0), h(d, A, v, "⊐", "\\sqsupset", !0), h(d, A, v, "≽", "\\succcurlyeq", !0), h(d, A, v, "⋟", "\\curlyeqsucc", !0), h(d, A, v, "≿", "\\succsim", !0), h(d, A, v, "⪸", "\\succapprox", !0), h(d, A, v, "⊳", "\\vartriangleright"), h(d, A, v, "⊵", "\\trianglerighteq"), h(d, A, v, "⊩", "\\Vdash", !0), h(d, A, v, "∣", "\\shortmid"), h(d, A, v, "∥", "\\shortparallel"), h(d, A, v, "≬", "\\between", !0), h(d, A, v, "⋔", "\\pitchfork", !0), h(d, A, v, "∝", "\\varpropto"), h(d, A, v, "◀", "\\blacktriangleleft"), h(d, A, v, "∴", "\\therefore", !0), h(d, A, v, "∍", "\\backepsilon"), h(d, A, v, "▶", "\\blacktriangleright"), h(d, A, v, "∵", "\\because", !0), h(d, A, v, "⋘", "\\llless"), h(d, A, v, "⋙", "\\gggtr"), h(d, A, re, "⊲", "\\lhd"), h(d, A, re, "⊳", "\\rhd"), h(d, A, v, "≂", "\\eqsim", !0), h(d, w, v, "⋈", "\\Join"), h(d, A, v, "≑", "\\Doteq", !0), h(d, A, re, "∔", "\\dotplus", !0), h(d, A, re, "∖", "\\smallsetminus"), h(d, A, re, "⋒", "\\Cap", !0), h(d, A, re, "⋓", "\\Cup", !0), h(d, A, re, "⩞", "\\doublebarwedge", !0), h(d, A, re, "⊟", "\\boxminus", !0), h(d, A, re, "⊞", "\\boxplus", !0), h(d, A, re, "⋇", "\\divideontimes", !0), h(d, A, re, "⋉", "\\ltimes", !0), h(d, A, re, "⋊", "\\rtimes", !0), h(d, A, re, "⋋", "\\leftthreetimes", !0), h(d, A, re, "⋌", "\\rightthreetimes", !0), h(d, A, re, "⋏", "\\curlywedge", !0), h(d, A, re, "⋎", "\\curlyvee", !0), h(d, A, re, "⊝", "\\circleddash", !0), h(d, A, re, "⊛", "\\circledast", !0), h(d, A, re, "⋅", "\\centerdot"), h(d, A, re, "⊺", "\\intercal", !0), h(d, A, re, "⋒", "\\doublecap"), h(d, A, re, "⋓", "\\doublecup"), h(d, A, re, "⊠", "\\boxtimes", !0), h(d, A, v, "⇢", "\\dashrightarrow", !0), h(d, A, v, "⇠", "\\dashleftarrow", !0), h(d, A, v, "⇇", "\\leftleftarrows", !0), h(d, A, v, "⇆", "\\leftrightarrows", !0), h(d, A, v, "⇚", "\\Lleftarrow", !0), h(d, A, v, "↞", "\\twoheadleftarrow", !0), h(d, A, v, "↢", "\\leftarrowtail", !0), h(d, A, v, "↫", "\\looparrowleft", !0), h(d, A, v, "⇋", "\\leftrightharpoons", !0), h(d, A, v, "↶", "\\curvearrowleft", !0), h(d, A, v, "↺", "\\circlearrowleft", !0), h(d, A, v, "↰", "\\Lsh", !0), h(d, A, v, "⇈", "\\upuparrows", !0), h(d, A, v, "↿", "\\upharpoonleft", !0), h(d, A, v, "⇃", "\\downharpoonleft", !0), h(d, w, v, "⊶", "\\origof", !0), h(d, w, v, "⊷", "\\imageof", !0), h(d, A, v, "⊸", "\\multimap", !0), h(d, A, v, "↭", "\\leftrightsquigarrow", !0), h(d, A, v, "⇉", "\\rightrightarrows", !0), h(d, A, v, "⇄", "\\rightleftarrows", !0), h(d, A, v, "↠", "\\twoheadrightarrow", !0), h(d, A, v, "↣", "\\rightarrowtail", !0), h(d, A, v, "↬", "\\looparrowright", !0), h(d, A, v, "↷", "\\curvearrowright", !0), h(d, A, v, "↻", "\\circlearrowright", !0), h(d, A, v, "↱", "\\Rsh", !0), h(d, A, v, "⇊", "\\downdownarrows", !0), h(d, A, v, "↾", "\\upharpoonright", !0), h(d, A, v, "⇂", "\\downharpoonright", !0), h(d, A, v, "⇝", "\\rightsquigarrow", !0), h(d, A, v, "⇝", "\\leadsto"), h(d, A, v, "⇛", "\\Rrightarrow", !0), h(d, A, v, "↾", "\\restriction"), h(d, w, E, "‘", "`"), h(d, w, E, "$", "\\$"), h(V, w, E, "$", "\\$"), h(V, w, E, "$", "\\textdollar"), h(d, w, E, "%", "\\%"), h(V, w, E, "%", "\\%"), h(d, w, E, "_", "\\_"), h(V, w, E, "_", "\\_"), h(V, w, E, "_", "\\textunderscore"), h(d, w, E, "∠", "\\angle", !0), h(d, w, E, "∞", "\\infty", !0), h(d, w, E, "′", "\\prime"), h(d, w, E, "△", "\\triangle"), h(d, w, E, "Γ", "\\Gamma", !0), h(d, w, E, "Δ", "\\Delta", !0), h(d, w, E, "Θ", "\\Theta", !0), h(d, w, E, "Λ", "\\Lambda", !0), h(d, w, E, "Ξ", "\\Xi", !0), h(d, w, E, "Π", "\\Pi", !0), h(d, w, E, "Σ", "\\Sigma", !0), h(d, w, E, "Υ", "\\Upsilon", !0), h(d, w, E, "Φ", "\\Phi", !0), h(d, w, E, "Ψ", "\\Psi", !0), h(d, w, E, "Ω", "\\Omega", !0), h(d, w, E, "A", "Α"), h(d, w, E, "B", "Β"), h(d, w, E, "E", "Ε"), h(d, w, E, "Z", "Ζ"), h(d, w, E, "H", "Η"), h(d, w, E, "I", "Ι"), h(d, w, E, "K", "Κ"), h(d, w, E, "M", "Μ"), h(d, w, E, "N", "Ν"), h(d, w, E, "O", "Ο"), h(d, w, E, "P", "Ρ"), h(d, w, E, "T", "Τ"), h(d, w, E, "X", "Χ"), h(d, w, E, "¬", "\\neg", !0), h(d, w, E, "¬", "\\lnot"), h(d, w, E, "⊤", "\\top"), h(d, w, E, "⊥", "\\bot"), h(d, w, E, "∅", "\\emptyset"), h(d, A, E, "∅", "\\varnothing"), h(d, w, G, "α", "\\alpha", !0), h(d, w, G, "β", "\\beta", !0), h(d, w, G, "γ", "\\gamma", !0), h(d, w, G, "δ", "\\delta", !0), h(d, w, G, "ϵ", "\\epsilon", !0), h(d, w, G, "ζ", "\\zeta", !0), h(d, w, G, "η", "\\eta", !0), h(d, w, G, "θ", "\\theta", !0), h(d, w, G, "ι", "\\iota", !0), h(d, w, G, "κ", "\\kappa", !0), h(d, w, G, "λ", "\\lambda", !0), h(d, w, G, "μ", "\\mu", !0), h(d, w, G, "ν", "\\nu", !0), h(d, w, G, "ξ", "\\xi", !0), h(d, w, G, "ο", "\\omicron", !0), h(d, w, G, "π", "\\pi", !0), h(d, w, G, "ρ", "\\rho", !0), h(d, w, G, "σ", "\\sigma", !0), h(d, w, G, "τ", "\\tau", !0), h(d, w, G, "υ", "\\upsilon", !0), h(d, w, G, "ϕ", "\\phi", !0), h(d, w, G, "χ", "\\chi", !0), h(d, w, G, "ψ", "\\psi", !0), h(d, w, G, "ω", "\\omega", !0), h(d, w, G, "ε", "\\varepsilon", !0), h(d, w, G, "ϑ", "\\vartheta", !0), h(d, w, G, "ϖ", "\\varpi", !0), h(d, w, G, "ϱ", "\\varrho", !0), h(d, w, G, "ς", "\\varsigma", !0), h(d, w, G, "φ", "\\varphi", !0), h(d, w, re, "∗", "*", !0), h(d, w, re, "+", "+"), h(d, w, re, "−", "-", !0), h(d, w, re, "⋅", "\\cdot", !0), h(d, w, re, "∘", "\\circ", !0), h(d, w, re, "÷", "\\div", !0), h(d, w, re, "±", "\\pm", !0), h(d, w, re, "×", "\\times", !0), h(d, w, re, "∩", "\\cap", !0), h(d, w, re, "∪", "\\cup", !0), h(d, w, re, "∖", "\\setminus", !0), h(d, w, re, "∧", "\\land"), h(d, w, re, "∨", "\\lor"), h(d, w, re, "∧", "\\wedge", !0), h(d, w, re, "∨", "\\vee", !0), h(d, w, E, "√", "\\surd"), h(d, w, j, "⟨", "\\langle", !0), h(d, w, j, "∣", "\\lvert"), h(d, w, j, "∥", "\\lVert"), h(d, w, nt, "?", "?"), h(d, w, nt, "!", "!"), h(d, w, nt, "⟩", "\\rangle", !0), h(d, w, nt, "∣", "\\rvert"), h(d, w, nt, "∥", "\\rVert"), h(d, w, v, "=", "="), h(d, w, v, ":", ":"), h(d, w, v, "≈", "\\approx", !0), h(d, w, v, "≅", "\\cong", !0), h(d, w, v, "≥", "\\ge"), h(d, w, v, "≥", "\\geq", !0), h(d, w, v, "←", "\\gets"), h(d, w, v, ">", "\\gt", !0), h(d, w, v, "∈", "\\in", !0), h(d, w, v, "", "\\@not"), h(d, w, v, "⊂", "\\subset", !0), h(d, w, v, "⊃", "\\supset", !0), h(d, w, v, "⊆", "\\subseteq", !0), h(d, w, v, "⊇", "\\supseteq", !0), h(d, A, v, "⊈", "\\nsubseteq", !0), h(d, A, v, "⊉", "\\nsupseteq", !0), h(d, w, v, "⊨", "\\models"), h(d, w, v, "←", "\\leftarrow", !0), h(d, w, v, "≤", "\\le"), h(d, w, v, "≤", "\\leq", !0), h(d, w, v, "<", "\\lt", !0), h(d, w, v, "→", "\\rightarrow", !0), h(d, w, v, "→", "\\to"), h(d, A, v, "≱", "\\ngeq", !0), h(d, A, v, "≰", "\\nleq", !0), h(d, w, Oe, " ", "\\ "), h(d, w, Oe, " ", "\\space"), h(d, w, Oe, " ", "\\nobreakspace"), h(V, w, Oe, " ", "\\ "), h(V, w, Oe, " ", " "), h(V, w, Oe, " ", "\\space"), h(V, w, Oe, " ", "\\nobreakspace"), h(d, w, Oe, null, "\\nobreak"), h(d, w, Oe, null, "\\allowbreak"), h(d, w, le, ",", ","), h(d, w, le, ";", ";"), h(d, A, re, "⊼", "\\barwedge", !0), h(d, A, re, "⊻", "\\veebar", !0), h(d, w, re, "⊙", "\\odot", !0), h(d, w, re, "⊕", "\\oplus", !0), h(d, w, re, "⊗", "\\otimes", !0), h(d, w, E, "∂", "\\partial", !0), h(d, w, re, "⊘", "\\oslash", !0), h(d, A, re, "⊚", "\\circledcirc", !0), h(d, A, re, "⊡", "\\boxdot", !0), h(d, w, re, "△", "\\bigtriangleup"), h(d, w, re, "▽", "\\bigtriangledown"), h(d, w, re, "†", "\\dagger"), h(d, w, re, "⋄", "\\diamond"), h(d, w, re, "⋆", "\\star"), h(d, w, re, "◃", "\\triangleleft"), h(d, w, re, "▹", "\\triangleright"), h(d, w, j, "{", "\\{"), h(V, w, E, "{", "\\{"), h(V, w, E, "{", "\\textbraceleft"), h(d, w, nt, "}", "\\}"), h(V, w, E, "}", "\\}"), h(V, w, E, "}", "\\textbraceright"), h(d, w, j, "{", "\\lbrace"), h(d, w, nt, "}", "\\rbrace"), h(d, w, j, "[", "\\lbrack", !0), h(V, w, E, "[", "\\lbrack", !0), h(d, w, nt, "]", "\\rbrack", !0), h(V, w, E, "]", "\\rbrack", !0), h(d, w, j, "(", "\\lparen", !0), h(d, w, nt, ")", "\\rparen", !0), h(V, w, E, "<", "\\textless", !0), h(V, w, E, ">", "\\textgreater", !0), h(d, w, j, "⌊", "\\lfloor", !0), h(d, w, nt, "⌋", "\\rfloor", !0), h(d, w, j, "⌈", "\\lceil", !0), h(d, w, nt, "⌉", "\\rceil", !0), h(d, w, E, "\\", "\\backslash"), h(d, w, E, "∣", "|"), h(d, w, E, "∣", "\\vert"), h(V, w, E, "|", "\\textbar", !0), h(d, w, E, "∥", "\\|"), h(d, w, E, "∥", "\\Vert"), h(V, w, E, "∥", "\\textbardbl"), h(V, w, E, "~", "\\textasciitilde"), h(V, w, E, "\\", "\\textbackslash"), h(V, w, E, "^", "\\textasciicircum"), h(d, w, v, "↑", "\\uparrow", !0), h(d, w, v, "⇑", "\\Uparrow", !0), h(d, w, v, "↓", "\\downarrow", !0), h(d, w, v, "⇓", "\\Downarrow", !0), h(d, w, v, "↕", "\\updownarrow", !0), h(d, w, v, "⇕", "\\Updownarrow", !0), h(d, w, C, "∐", "\\coprod"), h(d, w, C, "⋁", "\\bigvee"), h(d, w, C, "⋀", "\\bigwedge"), h(d, w, C, "⨄", "\\biguplus"), h(d, w, C, "⋂", "\\bigcap"), h(d, w, C, "⋃", "\\bigcup"), h(d, w, C, "∫", "\\int"), h(d, w, C, "∫", "\\intop"), h(d, w, C, "∬", "\\iint"), h(d, w, C, "∭", "\\iiint"), h(d, w, C, "∏", "\\prod"), h(d, w, C, "∑", "\\sum"), h(d, w, C, "⨂", "\\bigotimes"), h(d, w, C, "⨁", "\\bigoplus"), h(d, w, C, "⨀", "\\bigodot"), h(d, w, C, "∮", "\\oint"), h(d, w, C, "∯", "\\oiint"), h(d, w, C, "∰", "\\oiiint"), h(d, w, C, "⨆", "\\bigsqcup"), h(d, w, C, "∫", "\\smallint"), h(V, w, x0, "…", "\\textellipsis"), h(d, w, x0, "…", "\\mathellipsis"), h(V, w, x0, "…", "\\ldots", !0), h(d, w, x0, "…", "\\ldots", !0), h(d, w, x0, "⋯", "\\@cdots", !0), h(d, w, x0, "⋱", "\\ddots", !0), h(d, w, E, "⋮", "\\varvdots"), h(d, w, Re, "ˊ", "\\acute"), h(d, w, Re, "ˋ", "\\grave"), h(d, w, Re, "¨", "\\ddot"), h(d, w, Re, "~", "\\tilde"), h(d, w, Re, "ˉ", "\\bar"), h(d, w, Re, "˘", "\\breve"), h(d, w, Re, "ˇ", "\\check"), h(d, w, Re, "^", "\\hat"), h(d, w, Re, "⃗", "\\vec"), h(d, w, Re, "˙", "\\dot"), h(d, w, Re, "˚", "\\mathring"), h(d, w, G, "", "\\@imath"), h(d, w, G, "", "\\@jmath"), h(d, w, E, "ı", "ı"), h(d, w, E, "ȷ", "ȷ"), h(V, w, E, "ı", "\\i", !0), h(V, w, E, "ȷ", "\\j", !0), h(V, w, E, "ß", "\\ss", !0), h(V, w, E, "æ", "\\ae", !0), h(V, w, E, "œ", "\\oe", !0), h(V, w, E, "ø", "\\o", !0), h(V, w, E, "Æ", "\\AE", !0), h(V, w, E, "Œ", "\\OE", !0), h(V, w, E, "Ø", "\\O", !0), h(V, w, Re, "ˊ", "\\'"), h(V, w, Re, "ˋ", "\\`"), h(V, w, Re, "ˆ", "\\^"), h(V, w, Re, "˜", "\\~"), h(V, w, Re, "ˉ", "\\="), h(V, w, Re, "˘", "\\u"), h(V, w, Re, "˙", "\\."), h(V, w, Re, "¸", "\\c"), h(V, w, Re, "˚", "\\r"), h(V, w, Re, "ˇ", "\\v"), h(V, w, Re, "¨", '\\"'), h(V, w, Re, "˝", "\\H"), h(V, w, Re, "◯", "\\textcircled");
+          const rt = {
+            "--": !0,
+            "---": !0,
+            "``": !0,
+            "''": !0
+          };
+          h(V, w, E, "–", "--", !0), h(V, w, E, "–", "\\textendash"), h(V, w, E, "—", "---", !0), h(V, w, E, "—", "\\textemdash"), h(V, w, E, "‘", "`", !0), h(V, w, E, "‘", "\\textquoteleft"), h(V, w, E, "’", "'", !0), h(V, w, E, "’", "\\textquoteright"), h(V, w, E, "“", "``", !0), h(V, w, E, "“", "\\textquotedblleft"), h(V, w, E, "”", "''", !0), h(V, w, E, "”", "\\textquotedblright"), h(d, w, E, "°", "\\degree", !0), h(V, w, E, "°", "\\degree"), h(V, w, E, "°", "\\textdegree", !0), h(d, w, E, "£", "\\pounds"), h(d, w, E, "£", "\\mathsterling", !0), h(V, w, E, "£", "\\pounds"), h(V, w, E, "£", "\\textsterling", !0), h(d, A, E, "✠", "\\maltese"), h(V, A, E, "✠", "\\maltese");
+          const Kt = '0123456789/@."';
+          for (let t = 0; t < Kt.length; t++) {
+            const e = Kt.charAt(t);
+            h(d, w, E, e, e);
+          }
+          const D0 = '0123456789!@*()-=+";:?/.,';
+          for (let t = 0; t < D0.length; t++) {
+            const e = D0.charAt(t);
+            h(V, w, E, e, e);
+          }
+          const Qe = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+          for (let t = 0; t < Qe.length; t++) {
+            const e = Qe.charAt(t);
+            h(d, w, G, e, e), h(V, w, E, e, e);
+          }
+          h(d, A, E, "C", "ℂ"), h(V, A, E, "C", "ℂ"), h(d, A, E, "H", "ℍ"), h(V, A, E, "H", "ℍ"), h(d, A, E, "N", "ℕ"), h(V, A, E, "N", "ℕ"), h(d, A, E, "P", "ℙ"), h(V, A, E, "P", "ℙ"), h(d, A, E, "Q", "ℚ"), h(V, A, E, "Q", "ℚ"), h(d, A, E, "R", "ℝ"), h(V, A, E, "R", "ℝ"), h(d, A, E, "Z", "ℤ"), h(V, A, E, "Z", "ℤ"), h(d, w, G, "h", "ℎ"), h(V, w, G, "h", "ℎ");
+          let fe = "";
+          for (let t = 0; t < Qe.length; t++) {
+            const e = Qe.charAt(t);
+            fe = String.fromCharCode(55349, 56320 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56372 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56424 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56580 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56684 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56736 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56788 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56840 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56944 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), t < 26 && (fe = String.fromCharCode(55349, 56632 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 56476 + t), h(d, w, G, e, fe), h(V, w, E, e, fe));
+          }
+          fe = "𝕜", h(d, w, G, "k", fe), h(V, w, E, "k", fe);
+          for (let t = 0; t < 10; t++) {
+            const e = t.toString();
+            fe = String.fromCharCode(55349, 57294 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 57314 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 57324 + t), h(d, w, G, e, fe), h(V, w, E, e, fe), fe = String.fromCharCode(55349, 57334 + t), h(d, w, G, e, fe), h(V, w, E, e, fe);
+          }
+          const tn = "ÐÞþ";
+          for (let t = 0; t < tn.length; t++) {
+            const e = tn.charAt(t);
+            h(d, w, G, e, e), h(V, w, E, e, e);
+          }
+          const Hn = [
+            ["mathbf", "textbf", "Main-Bold"],
+            // A-Z bold upright
+            ["mathbf", "textbf", "Main-Bold"],
+            // a-z bold upright
+            ["mathnormal", "textit", "Math-Italic"],
+            // A-Z italic
+            ["mathnormal", "textit", "Math-Italic"],
+            // a-z italic
+            ["boldsymbol", "boldsymbol", "Main-BoldItalic"],
+            // A-Z bold italic
+            ["boldsymbol", "boldsymbol", "Main-BoldItalic"],
+            // a-z bold italic
+            // Map fancy A-Z letters to script, not calligraphic.
+            // This aligns with unicode-math and math fonts (except Cambria Math).
+            ["mathscr", "textscr", "Script-Regular"],
+            // A-Z script
+            ["", "", ""],
+            // a-z script.  No font
+            ["", "", ""],
+            // A-Z bold script. No font
+            ["", "", ""],
+            // a-z bold script. No font
+            ["mathfrak", "textfrak", "Fraktur-Regular"],
+            // A-Z Fraktur
+            ["mathfrak", "textfrak", "Fraktur-Regular"],
+            // a-z Fraktur
+            ["mathbb", "textbb", "AMS-Regular"],
+            // A-Z double-struck
+            ["mathbb", "textbb", "AMS-Regular"],
+            // k double-struck
+            // Note that we are using a bold font, but font metrics for regular Fraktur.
+            ["mathboldfrak", "textboldfrak", "Fraktur-Regular"],
+            // A-Z bold Fraktur
+            ["mathboldfrak", "textboldfrak", "Fraktur-Regular"],
+            // a-z bold Fraktur
+            ["mathsf", "textsf", "SansSerif-Regular"],
+            // A-Z sans-serif
+            ["mathsf", "textsf", "SansSerif-Regular"],
+            // a-z sans-serif
+            ["mathboldsf", "textboldsf", "SansSerif-Bold"],
+            // A-Z bold sans-serif
+            ["mathboldsf", "textboldsf", "SansSerif-Bold"],
+            // a-z bold sans-serif
+            ["mathitsf", "textitsf", "SansSerif-Italic"],
+            // A-Z italic sans-serif
+            ["mathitsf", "textitsf", "SansSerif-Italic"],
+            // a-z italic sans-serif
+            ["", "", ""],
+            // A-Z bold italic sans. No font
+            ["", "", ""],
+            // a-z bold italic sans. No font
+            ["mathtt", "texttt", "Typewriter-Regular"],
+            // A-Z monospace
+            ["mathtt", "texttt", "Typewriter-Regular"]
+            // a-z monospace
+          ], Js = [
+            ["mathbf", "textbf", "Main-Bold"],
+            // 0-9 bold
+            ["", "", ""],
+            // 0-9 double-struck. No KaTeX font.
+            ["mathsf", "textsf", "SansSerif-Regular"],
+            // 0-9 sans-serif
+            ["mathboldsf", "textboldsf", "SansSerif-Bold"],
+            // 0-9 bold sans-serif
+            ["mathtt", "texttt", "Typewriter-Regular"]
+            // 0-9 monospace
+          ], Xo = function(t, e) {
+            const n = t.charCodeAt(0), l = t.charCodeAt(1), c = (n - 55296) * 1024 + (l - 56320) + 65536, m = e === "math" ? 0 : 1;
+            if (119808 <= c && c < 120484) {
+              const b = Math.floor((c - 119808) / 26);
+              return [Hn[b][2], Hn[b][m]];
+            } else if (120782 <= c && c <= 120831) {
+              const b = Math.floor((c - 120782) / 10);
+              return [Js[b][2], Js[b][m]];
+            } else {
+              if (c === 120485 || c === 120486)
+                return [Hn[0][2], Hn[0][m]];
+              if (120486 < c && c < 120782)
+                return ["", ""];
+              throw new u("Unsupported character: " + t);
+            }
+          }, Un = function(t, e, n) {
+            return Le[n][t] && Le[n][t].replace && (t = Le[n][t].replace), {
+              value: t,
+              metrics: Wt(t, e, n)
+            };
+          }, Ht = function(t, e, n, l, c) {
+            const m = Un(t, e, n), b = m.metrics;
+            t = m.value;
+            let _;
+            if (b) {
+              let x = b.italic;
+              (n === "text" || l && l.font === "mathit") && (x = 0), _ = new st(t, b.height, b.depth, x, b.skew, b.width, c);
+            } else
+              typeof console < "u" && console.warn("No character metrics " + ("for '" + t + "' in style '" + e + "' and mode '" + n + "'")), _ = new st(t, 0, 0, 0, 0, 0, c);
+            if (l) {
+              _.maxFontSize = l.sizeMultiplier, l.style.isTight() && _.classes.push("mtight");
+              const x = l.getColor();
+              x && (_.style.color = x);
+            }
+            return _;
+          }, Yo = function(t, e, n, l) {
+            return l === void 0 && (l = []), n.font === "boldsymbol" && Un(t, "Main-Bold", e).metrics ? Ht(t, "Main-Bold", e, n, l.concat(["mathbf"])) : t === "\\" || Le[e][t].font === "main" ? Ht(t, "Main-Regular", e, n, l) : Ht(t, "AMS-Regular", e, n, l.concat(["amsrm"]));
+          }, Zo = function(t, e, n, l, c) {
+            return c !== "textord" && Un(t, "Math-BoldItalic", e).metrics ? {
+              fontName: "Math-BoldItalic",
+              fontClass: "boldsymbol"
+            } : {
+              fontName: "Main-Bold",
+              fontClass: "mathbf"
+            };
+          }, Ko = function(t, e, n) {
+            const l = t.mode, c = t.text, m = ["mord"], b = l === "math" || l === "text" && e.font, _ = b ? e.font : e.fontFamily;
+            let x = "", F = "";
+            if (c.charCodeAt(0) === 55349 && ([x, F] = Xo(c, l)), x.length > 0)
+              return Ht(c, x, l, e, m.concat(F));
+            if (_) {
+              let B, I;
+              if (_ === "boldsymbol") {
+                const q = Zo(c, l, e, m, n);
+                B = q.fontName, I = [q.fontClass];
+              } else
+                b ? (B = ti[_].fontName, I = [_]) : (B = Gn(_, e.fontWeight, e.fontShape), I = [_, e.fontWeight, e.fontShape]);
+              if (Un(c, B, l).metrics)
+                return Ht(c, B, l, e, m.concat(I));
+              if (rt.hasOwnProperty(c) && B.slice(0, 10) === "Typewriter") {
+                const q = [];
+                for (let W = 0; W < c.length; W++)
+                  q.push(Ht(c[W], B, l, e, m.concat(I)));
+                return ei(q);
+              }
+            }
+            if (n === "mathord")
+              return Ht(c, "Math-Italic", l, e, m.concat(["mathnormal"]));
+            if (n === "textord") {
+              const B = Le[l][c] && Le[l][c].font;
+              if (B === "ams") {
+                const I = Gn("amsrm", e.fontWeight, e.fontShape);
+                return Ht(c, I, l, e, m.concat("amsrm", e.fontWeight, e.fontShape));
+              } else if (B === "main" || !B) {
+                const I = Gn("textrm", e.fontWeight, e.fontShape);
+                return Ht(c, I, l, e, m.concat(e.fontWeight, e.fontShape));
+              } else {
+                const I = Gn(B, e.fontWeight, e.fontShape);
+                return Ht(c, I, l, e, m.concat(I, e.fontWeight, e.fontShape));
+              }
+            } else
+              throw new Error("unexpected type: " + n + " in makeOrd");
+          }, Qo = (t, e) => {
+            if (Xt(t.classes) !== Xt(e.classes) || t.skew !== e.skew || t.maxFontSize !== e.maxFontSize)
+              return !1;
+            if (t.classes.length === 1) {
+              const n = t.classes[0];
+              if (n === "mbin" || n === "mord")
+                return !1;
+            }
+            for (const n in t.style)
+              if (t.style.hasOwnProperty(n) && t.style[n] !== e.style[n])
+                return !1;
+            for (const n in e.style)
+              if (e.style.hasOwnProperty(n) && t.style[n] !== e.style[n])
+                return !1;
+            return !0;
+          }, Jo = (t) => {
+            for (let e = 0; e < t.length - 1; e++) {
+              const n = t[e], l = t[e + 1];
+              n instanceof st && l instanceof st && Qo(n, l) && (n.text += l.text, n.height = Math.max(n.height, l.height), n.depth = Math.max(n.depth, l.depth), n.italic = l.italic, t.splice(e + 1, 1), e--);
+            }
+            return t;
+          }, zr = function(t) {
+            let e = 0, n = 0, l = 0;
+            for (let c = 0; c < t.children.length; c++) {
+              const m = t.children[c];
+              m.height > e && (e = m.height), m.depth > n && (n = m.depth), m.maxFontSize > l && (l = m.maxFontSize);
+            }
+            t.height = e, t.depth = n, t.maxFontSize = l;
+          }, ft = function(t, e, n, l) {
+            const c = new Ge(t, e, n, l);
+            return zr(c), c;
+          }, $s = (t, e, n, l) => new Ge(t, e, n, l), $o = function(t, e, n) {
+            const l = ft([t], [], e);
+            return l.height = Math.max(n || e.fontMetrics().defaultRuleThickness, e.minRuleThickness), l.style.borderBottomWidth = $(l.height), l.maxFontSize = 1, l;
+          }, eu = function(t, e, n, l) {
+            const c = new Yt(t, e, n, l);
+            return zr(c), c;
+          }, ei = function(t) {
+            const e = new w0(t);
+            return zr(e), e;
+          }, tu = function(t, e) {
+            return t instanceof w0 ? ft([], [t], e) : t;
+          }, nu = function(t) {
+            if (t.positionType === "individualShift") {
+              const n = t.children, l = [n[0]], c = -n[0].shift - n[0].elem.depth;
+              let m = c;
+              for (let b = 1; b < n.length; b++) {
+                const _ = -n[b].shift - m - n[b].elem.depth, x = _ - (n[b - 1].elem.height + n[b - 1].elem.depth);
+                m = m + _, l.push({
+                  type: "kern",
+                  size: x
+                }), l.push(n[b]);
+              }
+              return {
+                children: l,
+                depth: c
+              };
+            }
+            let e;
+            if (t.positionType === "top") {
+              let n = t.positionData;
+              for (let l = 0; l < t.children.length; l++) {
+                const c = t.children[l];
+                n -= c.type === "kern" ? c.size : c.elem.height + c.elem.depth;
+              }
+              e = n;
+            } else if (t.positionType === "bottom")
+              e = -t.positionData;
+            else {
+              const n = t.children[0];
+              if (n.type !== "elem")
+                throw new Error('First child must have type "elem".');
+              if (t.positionType === "shift")
+                e = -n.elem.depth - t.positionData;
+              else if (t.positionType === "firstBaseline")
+                e = -n.elem.depth;
+              else
+                throw new Error("Invalid positionType " + t.positionType + ".");
+            }
+            return {
+              children: t.children,
+              depth: e
+            };
+          }, ru = function(t, e) {
+            const {
+              children: n,
+              depth: l
+            } = nu(t);
+            let c = 0;
+            for (let W = 0; W < n.length; W++) {
+              const se = n[W];
+              if (se.type === "elem") {
+                const ue = se.elem;
+                c = Math.max(c, ue.maxFontSize, ue.height);
+              }
+            }
+            c += 2;
+            const m = ft(["pstrut"], []);
+            m.style.height = $(c);
+            const b = [];
+            let _ = l, x = l, F = l;
+            for (let W = 0; W < n.length; W++) {
+              const se = n[W];
+              if (se.type === "kern")
+                F += se.size;
+              else {
+                const ue = se.elem, xe = se.wrapperClasses || [], we = se.wrapperStyle || {}, De = ft(xe, [m, ue], void 0, we);
+                De.style.top = $(-c - F - ue.depth), se.marginLeft && (De.style.marginLeft = se.marginLeft), se.marginRight && (De.style.marginRight = se.marginRight), b.push(De), F += ue.height + ue.depth;
+              }
+              _ = Math.min(_, F), x = Math.max(x, F);
+            }
+            const B = ft(["vlist"], b);
+            B.style.height = $(x);
+            let I;
+            if (_ < 0) {
+              const W = ft([], []), se = ft(["vlist"], [W]);
+              se.style.height = $(-_);
+              const ue = ft(["vlist-s"], [new st("​")]);
+              I = [ft(["vlist-r"], [B, ue]), ft(["vlist-r"], [se])];
+            } else
+              I = [ft(["vlist-r"], [B])];
+            const q = ft(["vlist-t"], I);
+            return I.length === 2 && q.classes.push("vlist-t2"), q.height = x, q.depth = -_, q;
+          }, su = (t, e) => {
+            const n = ft(["mspace"], [], e), l = Ne(t, e);
+            return n.style.marginRight = $(l), n;
+          }, Gn = function(t, e, n) {
+            let l = "";
+            switch (t) {
+              case "amsrm":
+                l = "AMS";
+                break;
+              case "textrm":
+                l = "Main";
+                break;
+              case "textsf":
+                l = "SansSerif";
+                break;
+              case "texttt":
+                l = "Typewriter";
+                break;
+              default:
+                l = t;
+            }
+            let c;
+            return e === "textbf" && n === "textit" ? c = "BoldItalic" : e === "textbf" ? c = "Bold" : e === "textit" ? c = "Italic" : c = "Regular", l + "-" + c;
+          }, ti = {
+            // styles
+            mathbf: {
+              variant: "bold",
+              fontName: "Main-Bold"
+            },
+            mathrm: {
+              variant: "normal",
+              fontName: "Main-Regular"
+            },
+            textit: {
+              variant: "italic",
+              fontName: "Main-Italic"
+            },
+            mathit: {
+              variant: "italic",
+              fontName: "Main-Italic"
+            },
+            mathnormal: {
+              variant: "italic",
+              fontName: "Math-Italic"
+            },
+            // "boldsymbol" is missing because they require the use of multiple fonts:
+            // Math-BoldItalic and Main-Bold.  This is handled by a special case in
+            // makeOrd which ends up calling boldsymbol.
+            // families
+            mathbb: {
+              variant: "double-struck",
+              fontName: "AMS-Regular"
+            },
+            mathcal: {
+              variant: "script",
+              fontName: "Caligraphic-Regular"
+            },
+            mathfrak: {
+              variant: "fraktur",
+              fontName: "Fraktur-Regular"
+            },
+            mathscr: {
+              variant: "script",
+              fontName: "Script-Regular"
+            },
+            mathsf: {
+              variant: "sans-serif",
+              fontName: "SansSerif-Regular"
+            },
+            mathtt: {
+              variant: "monospace",
+              fontName: "Typewriter-Regular"
+            }
+          }, ni = {
+            //   path, width, height
+            vec: ["vec", 0.471, 0.714],
+            // values from the font glyph
+            oiintSize1: ["oiintSize1", 0.957, 0.499],
+            // oval to overlay the integrand
+            oiintSize2: ["oiintSize2", 1.472, 0.659],
+            oiiintSize1: ["oiiintSize1", 1.304, 0.499],
+            oiiintSize2: ["oiiintSize2", 1.98, 0.659]
+          };
+          var O = {
+            fontMap: ti,
+            makeSymbol: Ht,
+            mathsym: Yo,
+            makeSpan: ft,
+            makeSvgSpan: $s,
+            makeLineSpan: $o,
+            makeAnchor: eu,
+            makeFragment: ei,
+            wrapFragment: tu,
+            makeVList: ru,
+            makeOrd: Ko,
+            makeGlue: su,
+            staticSvg: function(t, e) {
+              const [n, l, c] = ni[t], m = new Pt(n), b = new St([m], {
+                width: $(l),
+                height: $(c),
+                // Override CSS rule `.katex svg { width: 100% }`
+                style: "width:" + $(l),
+                viewBox: "0 0 " + 1e3 * l + " " + 1e3 * c,
+                preserveAspectRatio: "xMinYMin"
+              }), _ = $s(["overlay"], [b], e);
+              return _.height = c, _.style.height = $(c), _.style.width = $(l), _;
+            },
+            svgData: ni,
+            tryCombineChars: Jo
+          };
+          const We = {
+            number: 3,
+            unit: "mu"
+          }, q0 = {
+            number: 4,
+            unit: "mu"
+          }, c0 = {
+            number: 5,
+            unit: "mu"
+          }, iu = {
+            mord: {
+              mop: We,
+              mbin: q0,
+              mrel: c0,
+              minner: We
+            },
+            mop: {
+              mord: We,
+              mop: We,
+              mrel: c0,
+              minner: We
+            },
+            mbin: {
+              mord: q0,
+              mop: q0,
+              mopen: q0,
+              minner: q0
+            },
+            mrel: {
+              mord: c0,
+              mop: c0,
+              mopen: c0,
+              minner: c0
+            },
+            mopen: {},
+            mclose: {
+              mop: We,
+              mbin: q0,
+              mrel: c0,
+              minner: We
+            },
+            mpunct: {
+              mord: We,
+              mop: We,
+              mrel: c0,
+              mopen: We,
+              mclose: We,
+              mpunct: We,
+              minner: We
+            },
+            minner: {
+              mord: We,
+              mop: We,
+              mbin: q0,
+              mrel: c0,
+              mopen: We,
+              mpunct: We,
+              minner: We
+            }
+          }, lu = {
+            mord: {
+              mop: We
+            },
+            mop: {
+              mord: We,
+              mop: We
+            },
+            mbin: {},
+            mrel: {},
+            mopen: {},
+            mclose: {
+              mop: We
+            },
+            mpunct: {},
+            minner: {
+              mop: We
+            }
+          }, ri = {}, Vn = {}, Wn = {};
+          function ne(t) {
+            let {
+              type: e,
+              names: n,
+              props: l,
+              handler: c,
+              htmlBuilder: m,
+              mathmlBuilder: b
+            } = t;
+            const _ = {
+              type: e,
+              numArgs: l.numArgs,
+              argTypes: l.argTypes,
+              allowedInArgument: !!l.allowedInArgument,
+              allowedInText: !!l.allowedInText,
+              allowedInMath: l.allowedInMath === void 0 ? !0 : l.allowedInMath,
+              numOptionalArgs: l.numOptionalArgs || 0,
+              infix: !!l.infix,
+              primitive: !!l.primitive,
+              handler: c
+            };
+            for (let x = 0; x < n.length; ++x)
+              ri[n[x]] = _;
+            e && (m && (Vn[e] = m), b && (Wn[e] = b));
+          }
+          function P0(t) {
+            let {
+              type: e,
+              htmlBuilder: n,
+              mathmlBuilder: l
+            } = t;
+            ne({
+              type: e,
+              names: [],
+              props: {
+                numArgs: 0
+              },
+              handler() {
+                throw new Error("Should never be called.");
+              },
+              htmlBuilder: n,
+              mathmlBuilder: l
+            });
+          }
+          const jn = function(t) {
+            return t.type === "ordgroup" && t.body.length === 1 ? t.body[0] : t;
+          }, Ze = function(t) {
+            return t.type === "ordgroup" ? t.body : [t];
+          }, h0 = O.makeSpan, au = ["leftmost", "mbin", "mopen", "mrel", "mop", "mpunct"], ou = ["rightmost", "mrel", "mclose", "mpunct"], uu = {
+            display: ae.DISPLAY,
+            text: ae.TEXT,
+            script: ae.SCRIPT,
+            scriptscript: ae.SCRIPTSCRIPT
+          }, cu = {
+            mord: "mord",
+            mop: "mop",
+            mbin: "mbin",
+            mrel: "mrel",
+            mopen: "mopen",
+            mclose: "mclose",
+            mpunct: "mpunct",
+            minner: "minner"
+          }, Je = function(t, e, n, l) {
+            l === void 0 && (l = [null, null]);
+            const c = [];
+            for (let F = 0; F < t.length; F++) {
+              const B = ve(t[F], e);
+              if (B instanceof w0) {
+                const I = B.children;
+                c.push(...I);
+              } else
+                c.push(B);
+            }
+            if (O.tryCombineChars(c), !n)
+              return c;
+            let m = e;
+            if (t.length === 1) {
+              const F = t[0];
+              F.type === "sizing" ? m = e.havingSize(F.size) : F.type === "styling" && (m = e.havingStyle(uu[F.style]));
+            }
+            const b = h0([l[0] || "leftmost"], [], e), _ = h0([l[1] || "rightmost"], [], e), x = n === "root";
+            return Br(c, (F, B) => {
+              const I = B.classes[0], q = F.classes[0];
+              I === "mbin" && R.contains(ou, q) ? B.classes[0] = "mord" : q === "mbin" && R.contains(au, I) && (F.classes[0] = "mord");
+            }, {
+              node: b
+            }, _, x), Br(c, (F, B) => {
+              const I = Rr(B), q = Rr(F), W = I && q ? F.hasClass("mtight") ? lu[I][q] : iu[I][q] : null;
+              if (W)
+                return O.makeGlue(W, m);
+            }, {
+              node: b
+            }, _, x), c;
+          }, Br = function(t, e, n, l, c) {
+            l && t.push(l);
+            let m = 0;
+            for (; m < t.length; m++) {
+              const b = t[m], _ = si(b);
+              if (_) {
+                Br(_.children, e, n, null, c);
+                continue;
+              }
+              const x = !b.hasClass("mspace");
+              if (x) {
+                const F = e(b, n.node);
+                F && (n.insertAfter ? n.insertAfter(F) : (t.unshift(F), m++));
+              }
+              x ? n.node = b : c && b.hasClass("newline") && (n.node = h0(["leftmost"])), n.insertAfter = /* @__PURE__ */ ((F) => (B) => {
+                t.splice(F + 1, 0, B), m++;
+              })(m);
+            }
+            l && t.pop();
+          }, si = function(t) {
+            return t instanceof w0 || t instanceof Yt || t instanceof Ge && t.hasClass("enclosing") ? t : null;
+          }, Nr = function(t, e) {
+            const n = si(t);
+            if (n) {
+              const l = n.children;
+              if (l.length) {
+                if (e === "right")
+                  return Nr(l[l.length - 1], "right");
+                if (e === "left")
+                  return Nr(l[0], "left");
+              }
+            }
+            return t;
+          }, Rr = function(t, e) {
+            return t ? (e && (t = Nr(t, e)), cu[t.classes[0]] || null) : null;
+          }, yn = function(t, e) {
+            const n = ["nulldelimiter"].concat(t.baseSizingClasses());
+            return h0(e.concat(n));
+          }, ve = function(t, e, n) {
+            if (!t)
+              return h0();
+            if (Vn[t.type]) {
+              let l = Vn[t.type](t, e);
+              if (n && e.size !== n.size) {
+                l = h0(e.sizingClasses(n), [l], e);
+                const c = e.sizeMultiplier / n.sizeMultiplier;
+                l.height *= c, l.depth *= c;
+              }
+              return l;
+            } else
+              throw new u("Got group of unknown type: '" + t.type + "'");
+          };
+          function Xn(t, e) {
+            const n = h0(["base"], t, e), l = h0(["strut"]);
+            return l.style.height = $(n.height + n.depth), n.depth && (l.style.verticalAlign = $(-n.depth)), n.children.unshift(l), n;
+          }
+          function Ir(t, e) {
+            let n = null;
+            t.length === 1 && t[0].type === "tag" && (n = t[0].tag, t = t[0].body);
+            const l = Je(t, e, "root");
+            let c;
+            l.length === 2 && l[1].hasClass("tag") && (c = l.pop());
+            const m = [];
+            let b = [];
+            for (let F = 0; F < l.length; F++)
+              if (b.push(l[F]), l[F].hasClass("mbin") || l[F].hasClass("mrel") || l[F].hasClass("allowbreak")) {
+                let B = !1;
+                for (; F < l.length - 1 && l[F + 1].hasClass("mspace") && !l[F + 1].hasClass("newline"); )
+                  F++, b.push(l[F]), l[F].hasClass("nobreak") && (B = !0);
+                B || (m.push(Xn(b, e)), b = []);
+              } else
+                l[F].hasClass("newline") && (b.pop(), b.length > 0 && (m.push(Xn(b, e)), b = []), m.push(l[F]));
+            b.length > 0 && m.push(Xn(b, e));
+            let _;
+            n ? (_ = Xn(Je(n, e, !0)), _.classes = ["tag"], m.push(_)) : c && m.push(c);
+            const x = h0(["katex-html"], m);
+            if (x.setAttribute("aria-hidden", "true"), _) {
+              const F = _.children[0];
+              F.style.height = $(x.height + x.depth), x.depth && (F.style.verticalAlign = $(-x.depth));
+            }
+            return x;
+          }
+          function ii(t) {
+            return new w0(t);
+          }
+          class Ft {
+            constructor(e, n, l) {
+              this.type = void 0, this.attributes = void 0, this.children = void 0, this.classes = void 0, this.type = e, this.attributes = {}, this.children = n || [], this.classes = l || [];
+            }
+            /**
+             * Sets an attribute on a MathML node. MathML depends on attributes to convey a
+             * semantic content, so this is used heavily.
+             */
+            setAttribute(e, n) {
+              this.attributes[e] = n;
+            }
+            /**
+             * Gets an attribute on a MathML node.
+             */
+            getAttribute(e) {
+              return this.attributes[e];
+            }
+            /**
+             * Converts the math node into a MathML-namespaced DOM element.
+             */
+            toNode() {
+              const e = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type);
+              for (const n in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, n) && e.setAttribute(n, this.attributes[n]);
+              this.classes.length > 0 && (e.className = Xt(this.classes));
+              for (let n = 0; n < this.children.length; n++)
+                e.appendChild(this.children[n].toNode());
+              return e;
+            }
+            /**
+             * Converts the math node into an HTML markup string.
+             */
+            toMarkup() {
+              let e = "<" + this.type;
+              for (const n in this.attributes)
+                Object.prototype.hasOwnProperty.call(this.attributes, n) && (e += " " + n + '="', e += R.escape(this.attributes[n]), e += '"');
+              this.classes.length > 0 && (e += ' class ="' + R.escape(Xt(this.classes)) + '"'), e += ">";
+              for (let n = 0; n < this.children.length; n++)
+                e += this.children[n].toMarkup();
+              return e += "</" + this.type + ">", e;
+            }
+            /**
+             * Converts the math node into a string, similar to innerText, but escaped.
+             */
+            toText() {
+              return this.children.map((e) => e.toText()).join("");
+            }
+          }
+          class _n {
+            constructor(e) {
+              this.text = void 0, this.text = e;
+            }
+            /**
+             * Converts the text node into a DOM text node.
+             */
+            toNode() {
+              return document.createTextNode(this.text);
+            }
+            /**
+             * Converts the text node into escaped HTML markup
+             * (representing the text itself).
+             */
+            toMarkup() {
+              return R.escape(this.toText());
+            }
+            /**
+             * Converts the text node into a string
+             * (representing the text itself).
+             */
+            toText() {
+              return this.text;
+            }
+          }
+          class hu {
+            /**
+             * Create a Space node with width given in CSS ems.
+             */
+            constructor(e) {
+              this.width = void 0, this.character = void 0, this.width = e, e >= 0.05555 && e <= 0.05556 ? this.character = " " : e >= 0.1666 && e <= 0.1667 ? this.character = " " : e >= 0.2222 && e <= 0.2223 ? this.character = " " : e >= 0.2777 && e <= 0.2778 ? this.character = "  " : e >= -0.05556 && e <= -0.05555 ? this.character = " ⁣" : e >= -0.1667 && e <= -0.1666 ? this.character = " ⁣" : e >= -0.2223 && e <= -0.2222 ? this.character = " ⁣" : e >= -0.2778 && e <= -0.2777 ? this.character = " ⁣" : this.character = null;
+            }
+            /**
+             * Converts the math node into a MathML-namespaced DOM element.
+             */
+            toNode() {
+              if (this.character)
+                return document.createTextNode(this.character);
+              {
+                const e = document.createElementNS("http://www.w3.org/1998/Math/MathML", "mspace");
+                return e.setAttribute("width", $(this.width)), e;
+              }
+            }
+            /**
+             * Converts the math node into an HTML markup string.
+             */
+            toMarkup() {
+              return this.character ? "<mtext>" + this.character + "</mtext>" : '<mspace width="' + $(this.width) + '"/>';
+            }
+            /**
+             * Converts the math node into a string, similar to innerText.
+             */
+            toText() {
+              return this.character ? this.character : " ";
+            }
+          }
+          var Y = {
+            MathNode: Ft,
+            TextNode: _n,
+            SpaceNode: hu,
+            newDocumentFragment: ii
+          };
+          const Et = function(t, e, n) {
+            return Le[e][t] && Le[e][t].replace && t.charCodeAt(0) !== 55349 && !(rt.hasOwnProperty(t) && n && (n.fontFamily && n.fontFamily.slice(4, 6) === "tt" || n.font && n.font.slice(4, 6) === "tt")) && (t = Le[e][t].replace), new Y.TextNode(t);
+          }, Lr = function(t) {
+            return t.length === 1 ? t[0] : new Y.MathNode("mrow", t);
+          }, Or = function(t, e) {
+            if (e.fontFamily === "texttt")
+              return "monospace";
+            if (e.fontFamily === "textsf")
+              return e.fontShape === "textit" && e.fontWeight === "textbf" ? "sans-serif-bold-italic" : e.fontShape === "textit" ? "sans-serif-italic" : e.fontWeight === "textbf" ? "bold-sans-serif" : "sans-serif";
+            if (e.fontShape === "textit" && e.fontWeight === "textbf")
+              return "bold-italic";
+            if (e.fontShape === "textit")
+              return "italic";
+            if (e.fontWeight === "textbf")
+              return "bold";
+            const n = e.font;
+            if (!n || n === "mathnormal")
+              return null;
+            const l = t.mode;
+            if (n === "mathit")
+              return "italic";
+            if (n === "boldsymbol")
+              return t.type === "textord" ? "bold" : "bold-italic";
+            if (n === "mathbf")
+              return "bold";
+            if (n === "mathbb")
+              return "double-struck";
+            if (n === "mathfrak")
+              return "fraktur";
+            if (n === "mathscr" || n === "mathcal")
+              return "script";
+            if (n === "mathsf")
+              return "sans-serif";
+            if (n === "mathtt")
+              return "monospace";
+            let c = t.text;
+            if (R.contains(["\\imath", "\\jmath"], c))
+              return null;
+            Le[l][c] && Le[l][c].replace && (c = Le[l][c].replace);
+            const m = O.fontMap[n].fontName;
+            return Wt(c, m, l) ? O.fontMap[n].variant : null;
+          }, dt = function(t, e, n) {
+            if (t.length === 1) {
+              const m = Ie(t[0], e);
+              return n && m instanceof Ft && m.type === "mo" && (m.setAttribute("lspace", "0em"), m.setAttribute("rspace", "0em")), [m];
+            }
+            const l = [];
+            let c;
+            for (let m = 0; m < t.length; m++) {
+              const b = Ie(t[m], e);
+              if (b instanceof Ft && c instanceof Ft) {
+                if (b.type === "mtext" && c.type === "mtext" && b.getAttribute("mathvariant") === c.getAttribute("mathvariant")) {
+                  c.children.push(...b.children);
+                  continue;
+                } else if (b.type === "mn" && c.type === "mn") {
+                  c.children.push(...b.children);
+                  continue;
+                } else if (b.type === "mi" && b.children.length === 1 && c.type === "mn") {
+                  const _ = b.children[0];
+                  if (_ instanceof _n && _.text === ".") {
+                    c.children.push(...b.children);
+                    continue;
+                  }
+                } else if (c.type === "mi" && c.children.length === 1) {
+                  const _ = c.children[0];
+                  if (_ instanceof _n && _.text === "̸" && (b.type === "mo" || b.type === "mi" || b.type === "mn")) {
+                    const x = b.children[0];
+                    x instanceof _n && x.text.length > 0 && (x.text = x.text.slice(0, 1) + "̸" + x.text.slice(1), l.pop());
+                  }
+                }
+              }
+              l.push(b), c = b;
+            }
+            return l;
+          }, v0 = function(t, e, n) {
+            return Lr(dt(t, e, n));
+          }, Ie = function(t, e) {
+            if (!t)
+              return new Y.MathNode("mrow");
+            if (Wn[t.type])
+              return Wn[t.type](t, e);
+            throw new u("Got group of unknown type: '" + t.type + "'");
+          };
+          function li(t, e, n, l, c) {
+            const m = dt(t, n);
+            let b;
+            m.length === 1 && m[0] instanceof Ft && R.contains(["mrow", "mtable"], m[0].type) ? b = m[0] : b = new Y.MathNode("mrow", m);
+            const _ = new Y.MathNode("annotation", [new Y.TextNode(e)]);
+            _.setAttribute("encoding", "application/x-tex");
+            const x = new Y.MathNode("semantics", [b, _]), F = new Y.MathNode("math", [x]);
+            F.setAttribute("xmlns", "http://www.w3.org/1998/Math/MathML"), l && F.setAttribute("display", "block");
+            const B = c ? "katex" : "katex-mathml";
+            return O.makeSpan([B], [F]);
+          }
+          const ai = function(t) {
+            return new en({
+              style: t.displayMode ? ae.DISPLAY : ae.TEXT,
+              maxSize: t.maxSize,
+              minRuleThickness: t.minRuleThickness
+            });
+          }, oi = function(t, e) {
+            if (e.displayMode) {
+              const n = ["katex-display"];
+              e.leqno && n.push("leqno"), e.fleqn && n.push("fleqn"), t = O.makeSpan(n, [t]);
+            }
+            return t;
+          }, fu = function(t, e, n) {
+            const l = ai(n);
+            let c;
+            if (n.output === "mathml")
+              return li(t, e, l, n.displayMode, !0);
+            if (n.output === "html") {
+              const m = Ir(t, l);
+              c = O.makeSpan(["katex"], [m]);
+            } else {
+              const m = li(t, e, l, n.displayMode, !1), b = Ir(t, l);
+              c = O.makeSpan(["katex"], [m, b]);
+            }
+            return oi(c, n);
+          }, du = function(t, e, n) {
+            const l = ai(n), c = Ir(t, l), m = O.makeSpan(["katex"], [c]);
+            return oi(m, n);
+          }, mu = {
+            widehat: "^",
+            widecheck: "ˇ",
+            widetilde: "~",
+            utilde: "~",
+            overleftarrow: "←",
+            underleftarrow: "←",
+            xleftarrow: "←",
+            overrightarrow: "→",
+            underrightarrow: "→",
+            xrightarrow: "→",
+            underbrace: "⏟",
+            overbrace: "⏞",
+            overgroup: "⏠",
+            undergroup: "⏡",
+            overleftrightarrow: "↔",
+            underleftrightarrow: "↔",
+            xleftrightarrow: "↔",
+            Overrightarrow: "⇒",
+            xRightarrow: "⇒",
+            overleftharpoon: "↼",
+            xleftharpoonup: "↼",
+            overrightharpoon: "⇀",
+            xrightharpoonup: "⇀",
+            xLeftarrow: "⇐",
+            xLeftrightarrow: "⇔",
+            xhookleftarrow: "↩",
+            xhookrightarrow: "↪",
+            xmapsto: "↦",
+            xrightharpoondown: "⇁",
+            xleftharpoondown: "↽",
+            xrightleftharpoons: "⇌",
+            xleftrightharpoons: "⇋",
+            xtwoheadleftarrow: "↞",
+            xtwoheadrightarrow: "↠",
+            xlongequal: "=",
+            xtofrom: "⇄",
+            xrightleftarrows: "⇄",
+            xrightequilibrium: "⇌",
+            // Not a perfect match.
+            xleftequilibrium: "⇋",
+            // None better available.
+            "\\cdrightarrow": "→",
+            "\\cdleftarrow": "←",
+            "\\cdlongequal": "="
+          }, pu = function(t) {
+            const e = new Y.MathNode("mo", [new Y.TextNode(mu[t.replace(/^\\/, "")])]);
+            return e.setAttribute("stretchy", "true"), e;
+          }, gu = {
+            //   path(s), minWidth, height, align
+            overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+            overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+            underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"],
+            underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"],
+            xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"],
+            "\\cdrightarrow": [["rightarrow"], 3, 522, "xMaxYMin"],
+            // CD minwwidth2.5pc
+            xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"],
+            "\\cdleftarrow": [["leftarrow"], 3, 522, "xMinYMin"],
+            Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"],
+            xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"],
+            xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"],
+            overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+            xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"],
+            xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"],
+            overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+            xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"],
+            xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"],
+            xlongequal: [["longequal"], 0.888, 334, "xMinYMin"],
+            "\\cdlongequal": [["longequal"], 3, 334, "xMinYMin"],
+            xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"],
+            xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"],
+            overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+            overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548],
+            underbrace: [["leftbraceunder", "midbraceunder", "rightbraceunder"], 1.6, 548],
+            underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522],
+            xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522],
+            xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560],
+            xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716],
+            xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716],
+            xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522],
+            xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522],
+            overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+            underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522],
+            overgroup: [["leftgroup", "rightgroup"], 0.888, 342],
+            undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342],
+            xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522],
+            xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528],
+            // The next three arrows are from the mhchem package.
+            // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the
+            // document as \xrightarrow or \xrightleftharpoons. Those have
+            // min-length = 1.75em, so we set min-length on these next three to match.
+            xrightleftarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901],
+            xrightequilibrium: [["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], 1.75, 716],
+            xleftequilibrium: [["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], 1.75, 716]
+          }, bu = function(t) {
+            return t.type === "ordgroup" ? t.body.length : 1;
+          };
+          var f0 = {
+            encloseSpan: function(t, e, n, l, c) {
+              let m;
+              const b = t.height + t.depth + n + l;
+              if (/fbox|color|angl/.test(e)) {
+                if (m = O.makeSpan(["stretchy", e], [], c), e === "fbox") {
+                  const _ = c.color && c.getColor();
+                  _ && (m.style.borderColor = _);
+                }
+              } else {
+                const _ = [];
+                /^[bx]cancel$/.test(e) && _.push(new bn({
+                  x1: "0",
+                  y1: "0",
+                  x2: "100%",
+                  y2: "100%",
+                  "stroke-width": "0.046em"
+                })), /^x?cancel$/.test(e) && _.push(new bn({
+                  x1: "0",
+                  y1: "100%",
+                  x2: "100%",
+                  y2: "0",
+                  "stroke-width": "0.046em"
+                }));
+                const x = new St(_, {
+                  width: "100%",
+                  height: $(b)
+                });
+                m = O.makeSvgSpan([], [x], c);
+              }
+              return m.height = b, m.style.height = $(b), m;
+            },
+            mathMLnode: pu,
+            svgSpan: function(t, e) {
+              function n() {
+                let b = 4e5;
+                const _ = t.label.slice(1);
+                if (R.contains(["widehat", "widecheck", "widetilde", "utilde"], _)) {
+                  const F = bu(t.base);
+                  let B, I, q;
+                  if (F > 5)
+                    _ === "widehat" || _ === "widecheck" ? (B = 420, b = 2364, q = 0.42, I = _ + "4") : (B = 312, b = 2340, q = 0.34, I = "tilde4");
+                  else {
+                    const ue = [1, 1, 2, 2, 3, 3][F];
+                    _ === "widehat" || _ === "widecheck" ? (b = [0, 1062, 2364, 2364, 2364][ue], B = [0, 239, 300, 360, 420][ue], q = [0, 0.24, 0.3, 0.3, 0.36, 0.42][ue], I = _ + ue) : (b = [0, 600, 1033, 2339, 2340][ue], B = [0, 260, 286, 306, 312][ue], q = [0, 0.26, 0.286, 0.3, 0.306, 0.34][ue], I = "tilde" + ue);
+                  }
+                  const W = new Pt(I), se = new St([W], {
+                    width: "100%",
+                    height: $(q),
+                    viewBox: "0 0 " + b + " " + B,
+                    preserveAspectRatio: "none"
+                  });
+                  return {
+                    span: O.makeSvgSpan([], [se], e),
+                    minWidth: 0,
+                    height: q
+                  };
+                } else {
+                  const x = [], F = gu[_], [B, I, q] = F, W = q / 1e3, se = B.length;
+                  let ue, xe;
+                  if (se === 1) {
+                    const we = F[3];
+                    ue = ["hide-tail"], xe = [we];
+                  } else if (se === 2)
+                    ue = ["halfarrow-left", "halfarrow-right"], xe = ["xMinYMin", "xMaxYMin"];
+                  else if (se === 3)
+                    ue = ["brace-left", "brace-center", "brace-right"], xe = ["xMinYMin", "xMidYMin", "xMaxYMin"];
+                  else
+                    throw new Error(`Correct katexImagesData or update code here to support
+                    ` + se + " children.");
+                  for (let we = 0; we < se; we++) {
+                    const De = new Pt(B[we]), Fe = new St([De], {
+                      width: "400em",
+                      height: $(W),
+                      viewBox: "0 0 " + b + " " + q,
+                      preserveAspectRatio: xe[we] + " slice"
+                    }), qe = O.makeSvgSpan([ue[we]], [Fe], e);
+                    if (se === 1)
+                      return {
+                        span: qe,
+                        minWidth: I,
+                        height: W
+                      };
+                    qe.style.height = $(W), x.push(qe);
+                  }
+                  return {
+                    span: O.makeSpan(["stretchy"], x, e),
+                    minWidth: I,
+                    height: W
+                  };
+                }
+              }
+              const {
+                span: l,
+                minWidth: c,
+                height: m
+              } = n();
+              return l.height = m, l.style.height = $(m), c > 0 && (l.style.minWidth = $(c)), l;
+            }
+          };
+          function pe(t, e) {
+            if (!t || t.type !== e)
+              throw new Error("Expected node of type " + e + ", but got " + (t ? "node of type " + t.type : String(t)));
+            return t;
+          }
+          function qr(t) {
+            const e = Yn(t);
+            if (!e)
+              throw new Error("Expected node of symbol group type, but got " + (t ? "node of type " + t.type : String(t)));
+            return e;
+          }
+          function Yn(t) {
+            return t && (t.type === "atom" || Zt.hasOwnProperty(t.type)) ? t : null;
+          }
+          const Pr = (t, e) => {
+            let n, l, c;
+            t && t.type === "supsub" ? (l = pe(t.base, "accent"), n = l.base, t.base = n, c = Pn(ve(t, e)), t.base = l) : (l = pe(t, "accent"), n = l.base);
+            const m = ve(n, e.havingCrampedStyle()), b = l.isShifty && R.isCharacterBox(n);
+            let _ = 0;
+            if (b) {
+              const q = R.getBaseElem(n), W = ve(q, e.havingCrampedStyle());
+              _ = wn(W).skew;
+            }
+            const x = l.label === "\\c";
+            let F = x ? m.height + m.depth : Math.min(m.height, e.fontMetrics().xHeight), B;
+            if (l.isStretchy)
+              B = f0.svgSpan(l, e), B = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: m
+                }, {
+                  type: "elem",
+                  elem: B,
+                  wrapperClasses: ["svg-align"],
+                  wrapperStyle: _ > 0 ? {
+                    width: "calc(100% - " + $(2 * _) + ")",
+                    marginLeft: $(2 * _)
+                  } : void 0
+                }]
+              }, e);
+            else {
+              let q, W;
+              l.label === "\\vec" ? (q = O.staticSvg("vec", e), W = O.svgData.vec[1]) : (q = O.makeOrd({
+                mode: l.mode,
+                text: l.label
+              }, e, "textord"), q = wn(q), q.italic = 0, W = q.width, x && (F += q.depth)), B = O.makeSpan(["accent-body"], [q]);
+              const se = l.label === "\\textcircled";
+              se && (B.classes.push("accent-full"), F = m.height);
+              let ue = _;
+              se || (ue -= W / 2), B.style.left = $(ue), l.label === "\\textcircled" && (B.style.top = ".2em"), B = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: m
+                }, {
+                  type: "kern",
+                  size: -F
+                }, {
+                  type: "elem",
+                  elem: B
+                }]
+              }, e);
+            }
+            const I = O.makeSpan(["mord", "accent"], [B], e);
+            return c ? (c.children[0] = I, c.height = Math.max(I.height, c.height), c.classes[0] = "mord", c) : I;
+          }, ui = (t, e) => {
+            const n = t.isStretchy ? f0.mathMLnode(t.label) : new Y.MathNode("mo", [Et(t.label, t.mode)]), l = new Y.MathNode("mover", [Ie(t.base, e), n]);
+            return l.setAttribute("accent", "true"), l;
+          }, wu = new RegExp(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring"].map((t) => "\\" + t).join("|"));
+          ne({
+            type: "accent",
+            names: ["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\mathring", "\\widecheck", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"],
+            props: {
+              numArgs: 1
+            },
+            handler: (t, e) => {
+              const n = jn(e[0]), l = !wu.test(t.funcName), c = !l || t.funcName === "\\widehat" || t.funcName === "\\widetilde" || t.funcName === "\\widecheck";
+              return {
+                type: "accent",
+                mode: t.parser.mode,
+                label: t.funcName,
+                isStretchy: l,
+                isShifty: c,
+                base: n
+              };
+            },
+            htmlBuilder: Pr,
+            mathmlBuilder: ui
+          }), ne({
+            type: "accent",
+            names: ["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\c", "\\r", "\\H", "\\v", "\\textcircled"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0,
+              allowedInMath: !0,
+              // unless in strict mode
+              argTypes: ["primitive"]
+            },
+            handler: (t, e) => {
+              const n = e[0];
+              let l = t.parser.mode;
+              return l === "math" && (t.parser.settings.reportNonstrict("mathVsTextAccents", "LaTeX's accent " + t.funcName + " works only in text mode"), l = "text"), {
+                type: "accent",
+                mode: l,
+                label: t.funcName,
+                isStretchy: !1,
+                isShifty: !0,
+                base: n
+              };
+            },
+            htmlBuilder: Pr,
+            mathmlBuilder: ui
+          }), ne({
+            type: "accentUnder",
+            names: ["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\utilde"],
+            props: {
+              numArgs: 1
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "accentUnder",
+                mode: n.mode,
+                label: l,
+                base: c
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = ve(t.base, e), l = f0.svgSpan(t, e), c = t.label === "\\utilde" ? 0.12 : 0, m = O.makeVList({
+                positionType: "top",
+                positionData: n.height,
+                children: [{
+                  type: "elem",
+                  elem: l,
+                  wrapperClasses: ["svg-align"]
+                }, {
+                  type: "kern",
+                  size: c
+                }, {
+                  type: "elem",
+                  elem: n
+                }]
+              }, e);
+              return O.makeSpan(["mord", "accentunder"], [m], e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = f0.mathMLnode(t.label), l = new Y.MathNode("munder", [Ie(t.base, e), n]);
+              return l.setAttribute("accentunder", "true"), l;
+            }
+          });
+          const Zn = (t) => {
+            const e = new Y.MathNode("mpadded", t ? [t] : []);
+            return e.setAttribute("width", "+0.6em"), e.setAttribute("lspace", "0.3em"), e;
+          };
+          ne({
+            type: "xArrow",
+            names: [
+              "\\xleftarrow",
+              "\\xrightarrow",
+              "\\xLeftarrow",
+              "\\xRightarrow",
+              "\\xleftrightarrow",
+              "\\xLeftrightarrow",
+              "\\xhookleftarrow",
+              "\\xhookrightarrow",
+              "\\xmapsto",
+              "\\xrightharpoondown",
+              "\\xrightharpoonup",
+              "\\xleftharpoondown",
+              "\\xleftharpoonup",
+              "\\xrightleftharpoons",
+              "\\xleftrightharpoons",
+              "\\xlongequal",
+              "\\xtwoheadrightarrow",
+              "\\xtwoheadleftarrow",
+              "\\xtofrom",
+              // The next 3 functions are here to support the mhchem extension.
+              // Direct use of these functions is discouraged and may break someday.
+              "\\xrightleftarrows",
+              "\\xrightequilibrium",
+              "\\xleftequilibrium",
+              // The next 3 functions are here only to support the {CD} environment.
+              "\\\\cdrightarrow",
+              "\\\\cdleftarrow",
+              "\\\\cdlongequal"
+            ],
+            props: {
+              numArgs: 1,
+              numOptionalArgs: 1
+            },
+            handler(t, e, n) {
+              let {
+                parser: l,
+                funcName: c
+              } = t;
+              return {
+                type: "xArrow",
+                mode: l.mode,
+                label: c,
+                body: e[0],
+                below: n[0]
+              };
+            },
+            // Flow is unable to correctly infer the type of `group`, even though it's
+            // unambiguously determined from the passed-in `type` above.
+            htmlBuilder(t, e) {
+              const n = e.style;
+              let l = e.havingStyle(n.sup());
+              const c = O.wrapFragment(ve(t.body, l, e), e), m = t.label.slice(0, 2) === "\\x" ? "x" : "cd";
+              c.classes.push(m + "-arrow-pad");
+              let b;
+              t.below && (l = e.havingStyle(n.sub()), b = O.wrapFragment(ve(t.below, l, e), e), b.classes.push(m + "-arrow-pad"));
+              const _ = f0.svgSpan(t, e), x = -e.fontMetrics().axisHeight + 0.5 * _.height;
+              let F = -e.fontMetrics().axisHeight - 0.5 * _.height - 0.111;
+              (c.depth > 0.25 || t.label === "\\xleftequilibrium") && (F -= c.depth);
+              let B;
+              if (b) {
+                const I = -e.fontMetrics().axisHeight + b.height + 0.5 * _.height + 0.111;
+                B = O.makeVList({
+                  positionType: "individualShift",
+                  children: [{
+                    type: "elem",
+                    elem: c,
+                    shift: F
+                  }, {
+                    type: "elem",
+                    elem: _,
+                    shift: x
+                  }, {
+                    type: "elem",
+                    elem: b,
+                    shift: I
+                  }]
+                }, e);
+              } else
+                B = O.makeVList({
+                  positionType: "individualShift",
+                  children: [{
+                    type: "elem",
+                    elem: c,
+                    shift: F
+                  }, {
+                    type: "elem",
+                    elem: _,
+                    shift: x
+                  }]
+                }, e);
+              return B.children[0].children[0].children[1].classes.push("svg-align"), O.makeSpan(["mrel", "x-arrow"], [B], e);
+            },
+            mathmlBuilder(t, e) {
+              const n = f0.mathMLnode(t.label);
+              n.setAttribute("minsize", t.label.charAt(0) === "x" ? "1.75em" : "3.0em");
+              let l;
+              if (t.body) {
+                const c = Zn(Ie(t.body, e));
+                if (t.below) {
+                  const m = Zn(Ie(t.below, e));
+                  l = new Y.MathNode("munderover", [n, m, c]);
+                } else
+                  l = new Y.MathNode("mover", [n, c]);
+              } else if (t.below) {
+                const c = Zn(Ie(t.below, e));
+                l = new Y.MathNode("munder", [n, c]);
+              } else
+                l = Zn(), l = new Y.MathNode("mover", [n, l]);
+              return l;
+            }
+          });
+          const yu = O.makeSpan;
+          function ci(t, e) {
+            const n = Je(t.body, e, !0);
+            return yu([t.mclass], n, e);
+          }
+          function hi(t, e) {
+            let n;
+            const l = dt(t.body, e);
+            return t.mclass === "minner" ? n = new Y.MathNode("mpadded", l) : t.mclass === "mord" ? t.isCharacterBox ? (n = l[0], n.type = "mi") : n = new Y.MathNode("mi", l) : (t.isCharacterBox ? (n = l[0], n.type = "mo") : n = new Y.MathNode("mo", l), t.mclass === "mbin" ? (n.attributes.lspace = "0.22em", n.attributes.rspace = "0.22em") : t.mclass === "mpunct" ? (n.attributes.lspace = "0em", n.attributes.rspace = "0.17em") : t.mclass === "mopen" || t.mclass === "mclose" ? (n.attributes.lspace = "0em", n.attributes.rspace = "0em") : t.mclass === "minner" && (n.attributes.lspace = "0.0556em", n.attributes.width = "+0.1111em")), n;
+          }
+          ne({
+            type: "mclass",
+            names: ["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"],
+            props: {
+              numArgs: 1,
+              primitive: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "mclass",
+                mode: n.mode,
+                mclass: "m" + l.slice(5),
+                // TODO(kevinb): don't prefix with 'm'
+                body: Ze(c),
+                isCharacterBox: R.isCharacterBox(c)
+              };
+            },
+            htmlBuilder: ci,
+            mathmlBuilder: hi
+          });
+          const Kn = (t) => {
+            const e = t.type === "ordgroup" && t.body.length ? t.body[0] : t;
+            return e.type === "atom" && (e.family === "bin" || e.family === "rel") ? "m" + e.family : "mord";
+          };
+          ne({
+            type: "mclass",
+            names: ["\\@binrel"],
+            props: {
+              numArgs: 2
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "mclass",
+                mode: n.mode,
+                mclass: Kn(e[0]),
+                body: Ze(e[1]),
+                isCharacterBox: R.isCharacterBox(e[1])
+              };
+            }
+          }), ne({
+            type: "mclass",
+            names: ["\\stackrel", "\\overset", "\\underset"],
+            props: {
+              numArgs: 2
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[1], m = e[0];
+              let b;
+              l !== "\\stackrel" ? b = Kn(c) : b = "mrel";
+              const _ = {
+                type: "op",
+                mode: c.mode,
+                limits: !0,
+                alwaysHandleSupSub: !0,
+                parentIsSupSub: !1,
+                symbol: !1,
+                suppressBaseShift: l !== "\\stackrel",
+                body: Ze(c)
+              }, x = {
+                type: "supsub",
+                mode: m.mode,
+                base: _,
+                sup: l === "\\underset" ? null : m,
+                sub: l === "\\underset" ? m : null
+              };
+              return {
+                type: "mclass",
+                mode: n.mode,
+                mclass: b,
+                body: [x],
+                isCharacterBox: R.isCharacterBox(x)
+              };
+            },
+            htmlBuilder: ci,
+            mathmlBuilder: hi
+          }), ne({
+            type: "pmb",
+            names: ["\\pmb"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "pmb",
+                mode: n.mode,
+                mclass: Kn(e[0]),
+                body: Ze(e[0])
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = Je(t.body, e, !0), l = O.makeSpan([t.mclass], n, e);
+              return l.style.textShadow = "0.02em 0.01em 0.04px", l;
+            },
+            mathmlBuilder(t, e) {
+              const n = dt(t.body, e), l = new Y.MathNode("mstyle", n);
+              return l.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px"), l;
+            }
+          });
+          const _u = {
+            ">": "\\\\cdrightarrow",
+            "<": "\\\\cdleftarrow",
+            "=": "\\\\cdlongequal",
+            A: "\\uparrow",
+            V: "\\downarrow",
+            "|": "\\Vert",
+            ".": "no arrow"
+          }, fi = () => ({
+            type: "styling",
+            body: [],
+            mode: "math",
+            style: "display"
+          }), di = (t) => t.type === "textord" && t.text === "@", ku = (t, e) => (t.type === "mathord" || t.type === "atom") && t.text === e;
+          function xu(t, e, n) {
+            const l = _u[t];
+            switch (l) {
+              case "\\\\cdrightarrow":
+              case "\\\\cdleftarrow":
+                return n.callFunction(l, [e[0]], [e[1]]);
+              case "\\uparrow":
+              case "\\downarrow": {
+                const c = n.callFunction("\\\\cdleft", [e[0]], []), m = {
+                  type: "atom",
+                  text: l,
+                  mode: "math",
+                  family: "rel"
+                }, b = n.callFunction("\\Big", [m], []), _ = n.callFunction("\\\\cdright", [e[1]], []), x = {
+                  type: "ordgroup",
+                  mode: "math",
+                  body: [c, b, _]
+                };
+                return n.callFunction("\\\\cdparent", [x], []);
+              }
+              case "\\\\cdlongequal":
+                return n.callFunction("\\\\cdlongequal", [], []);
+              case "\\Vert": {
+                const c = {
+                  type: "textord",
+                  text: "\\Vert",
+                  mode: "math"
+                };
+                return n.callFunction("\\Big", [c], []);
+              }
+              default:
+                return {
+                  type: "textord",
+                  text: " ",
+                  mode: "math"
+                };
+            }
+          }
+          function Du(t) {
+            const e = [];
+            for (t.gullet.beginGroup(), t.gullet.macros.set("\\cr", "\\\\\\relax"), t.gullet.beginGroup(); ; ) {
+              e.push(t.parseExpression(!1, "\\\\")), t.gullet.endGroup(), t.gullet.beginGroup();
+              const m = t.fetch().text;
+              if (m === "&" || m === "\\\\")
+                t.consume();
+              else if (m === "\\end") {
+                e[e.length - 1].length === 0 && e.pop();
+                break;
+              } else
+                throw new u("Expected \\\\ or \\cr or \\end", t.nextToken);
+            }
+            let n = [];
+            const l = [n];
+            for (let m = 0; m < e.length; m++) {
+              const b = e[m];
+              let _ = fi();
+              for (let x = 0; x < b.length; x++)
+                if (!di(b[x]))
+                  _.body.push(b[x]);
+                else {
+                  n.push(_), x += 1;
+                  const F = qr(b[x]).text, B = new Array(2);
+                  if (B[0] = {
+                    type: "ordgroup",
+                    mode: "math",
+                    body: []
+                  }, B[1] = {
+                    type: "ordgroup",
+                    mode: "math",
+                    body: []
+                  }, !("=|.".indexOf(F) > -1))
+                    if ("<>AV".indexOf(F) > -1)
+                      for (let W = 0; W < 2; W++) {
+                        let se = !0;
+                        for (let ue = x + 1; ue < b.length; ue++) {
+                          if (ku(b[ue], F)) {
+                            se = !1, x = ue;
+                            break;
+                          }
+                          if (di(b[ue]))
+                            throw new u("Missing a " + F + " character to complete a CD arrow.", b[ue]);
+                          B[W].body.push(b[ue]);
+                        }
+                        if (se)
+                          throw new u("Missing a " + F + " character to complete a CD arrow.", b[x]);
+                      }
+                    else
+                      throw new u('Expected one of "<>AV=|." after @', b[x]);
+                  const q = {
+                    type: "styling",
+                    body: [xu(F, B, t)],
+                    mode: "math",
+                    style: "display"
+                    // CD is always displaystyle.
+                  };
+                  n.push(q), _ = fi();
+                }
+              m % 2 === 0 ? n.push(_) : n.shift(), n = [], l.push(n);
+            }
+            t.gullet.endGroup(), t.gullet.endGroup();
+            const c = new Array(l[0].length).fill({
+              type: "align",
+              align: "c",
+              pregap: 0.25,
+              // CD package sets \enskip between columns.
+              postgap: 0.25
+              // So pre and post each get half an \enskip, i.e. 0.25em.
+            });
+            return {
+              type: "array",
+              mode: "math",
+              body: l,
+              arraystretch: 1,
+              addJot: !0,
+              rowGaps: [null],
+              cols: c,
+              colSeparationType: "CD",
+              hLinesBeforeRow: new Array(l.length + 1).fill([])
+            };
+          }
+          ne({
+            type: "cdlabel",
+            names: ["\\\\cdleft", "\\\\cdright"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              return {
+                type: "cdlabel",
+                mode: n.mode,
+                side: l.slice(4),
+                label: e[0]
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = e.havingStyle(e.style.sup()), l = O.wrapFragment(ve(t.label, n, e), e);
+              return l.classes.push("cd-label-" + t.side), l.style.bottom = $(0.8 - l.depth), l.height = 0, l.depth = 0, l;
+            },
+            mathmlBuilder(t, e) {
+              let n = new Y.MathNode("mrow", [Ie(t.label, e)]);
+              return n = new Y.MathNode("mpadded", [n]), n.setAttribute("width", "0"), t.side === "left" && n.setAttribute("lspace", "-1width"), n.setAttribute("voffset", "0.7em"), n = new Y.MathNode("mstyle", [n]), n.setAttribute("displaystyle", "false"), n.setAttribute("scriptlevel", "1"), n;
+            }
+          }), ne({
+            type: "cdlabelparent",
+            names: ["\\\\cdparent"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "cdlabelparent",
+                mode: n.mode,
+                fragment: e[0]
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = O.wrapFragment(ve(t.fragment, e), e);
+              return n.classes.push("cd-vert-arrow"), n;
+            },
+            mathmlBuilder(t, e) {
+              return new Y.MathNode("mrow", [Ie(t.fragment, e)]);
+            }
+          }), ne({
+            type: "textord",
+            names: ["\\@char"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              const c = pe(e[0], "ordgroup").body;
+              let m = "";
+              for (let x = 0; x < c.length; x++) {
+                const F = pe(c[x], "textord");
+                m += F.text;
+              }
+              let b = parseInt(m), _;
+              if (isNaN(b))
+                throw new u("\\@char has non-numeric argument " + m);
+              if (b < 0 || b >= 1114111)
+                throw new u("\\@char with invalid code point " + m);
+              return b <= 65535 ? _ = String.fromCharCode(b) : (b -= 65536, _ = String.fromCharCode((b >> 10) + 55296, (b & 1023) + 56320)), {
+                type: "textord",
+                mode: n.mode,
+                text: _
+              };
+            }
+          });
+          const mi = (t, e) => {
+            const n = Je(t.body, e.withColor(t.color), !1);
+            return O.makeFragment(n);
+          }, pi = (t, e) => {
+            const n = dt(t.body, e.withColor(t.color)), l = new Y.MathNode("mstyle", n);
+            return l.setAttribute("mathcolor", t.color), l;
+          };
+          ne({
+            type: "color",
+            names: ["\\textcolor"],
+            props: {
+              numArgs: 2,
+              allowedInText: !0,
+              argTypes: ["color", "original"]
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              const l = pe(e[0], "color-token").color, c = e[1];
+              return {
+                type: "color",
+                mode: n.mode,
+                color: l,
+                body: Ze(c)
+              };
+            },
+            htmlBuilder: mi,
+            mathmlBuilder: pi
+          }), ne({
+            type: "color",
+            names: ["\\color"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0,
+              argTypes: ["color"]
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                breakOnTokenText: l
+              } = t;
+              const c = pe(e[0], "color-token").color;
+              n.gullet.macros.set("\\current@color", c);
+              const m = n.parseExpression(!0, l);
+              return {
+                type: "color",
+                mode: n.mode,
+                color: c,
+                body: m
+              };
+            },
+            htmlBuilder: mi,
+            mathmlBuilder: pi
+          }), ne({
+            type: "cr",
+            names: ["\\\\"],
+            props: {
+              numArgs: 0,
+              numOptionalArgs: 0,
+              allowedInText: !0
+            },
+            handler(t, e, n) {
+              let {
+                parser: l
+              } = t;
+              const c = l.gullet.future().text === "[" ? l.parseSizeGroup(!0) : null, m = !l.settings.displayMode || !l.settings.useStrictBehavior("newLineInDisplayMode", "In LaTeX, \\\\ or \\newline does nothing in display mode");
+              return {
+                type: "cr",
+                mode: l.mode,
+                newLine: m,
+                size: c && pe(c, "size").value
+              };
+            },
+            // The following builders are called only at the top level,
+            // not within tabular/array environments.
+            htmlBuilder(t, e) {
+              const n = O.makeSpan(["mspace"], [], e);
+              return t.newLine && (n.classes.push("newline"), t.size && (n.style.marginTop = $(Ne(t.size, e)))), n;
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mspace");
+              return t.newLine && (n.setAttribute("linebreak", "newline"), t.size && n.setAttribute("height", $(Ne(t.size, e)))), n;
+            }
+          });
+          const Hr = {
+            "\\global": "\\global",
+            "\\long": "\\\\globallong",
+            "\\\\globallong": "\\\\globallong",
+            "\\def": "\\gdef",
+            "\\gdef": "\\gdef",
+            "\\edef": "\\xdef",
+            "\\xdef": "\\xdef",
+            "\\let": "\\\\globallet",
+            "\\futurelet": "\\\\globalfuture"
+          }, gi = (t) => {
+            const e = t.text;
+            if (/^(?:[\\{}$&#^_]|EOF)$/.test(e))
+              throw new u("Expected a control sequence", t);
+            return e;
+          }, vu = (t) => {
+            let e = t.gullet.popToken();
+            return e.text === "=" && (e = t.gullet.popToken(), e.text === " " && (e = t.gullet.popToken())), e;
+          }, bi = (t, e, n, l) => {
+            let c = t.gullet.macros.get(n.text);
+            c == null && (n.noexpand = !0, c = {
+              tokens: [n],
+              numArgs: 0,
+              // reproduce the same behavior in expansion
+              unexpandable: !t.gullet.isExpandable(n.text)
+            }), t.gullet.macros.set(e, c, l);
+          };
+          ne({
+            type: "internal",
+            names: [
+              "\\global",
+              "\\long",
+              "\\\\globallong"
+              // can’t be entered directly
+            ],
+            props: {
+              numArgs: 0,
+              allowedInText: !0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t;
+              e.consumeSpaces();
+              const l = e.fetch();
+              if (Hr[l.text])
+                return (n === "\\global" || n === "\\\\globallong") && (l.text = Hr[l.text]), pe(e.parseFunction(), "internal");
+              throw new u("Invalid token after macro prefix", l);
+            }
+          }), ne({
+            type: "internal",
+            names: ["\\def", "\\gdef", "\\edef", "\\xdef"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              primitive: !0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t, l = e.gullet.popToken();
+              const c = l.text;
+              if (/^(?:[\\{}$&#^_]|EOF)$/.test(c))
+                throw new u("Expected a control sequence", l);
+              let m = 0, b;
+              const _ = [[]];
+              for (; e.gullet.future().text !== "{"; )
+                if (l = e.gullet.popToken(), l.text === "#") {
+                  if (e.gullet.future().text === "{") {
+                    b = e.gullet.future(), _[m].push("{");
+                    break;
+                  }
+                  if (l = e.gullet.popToken(), !/^[1-9]$/.test(l.text))
+                    throw new u('Invalid argument number "' + l.text + '"');
+                  if (parseInt(l.text) !== m + 1)
+                    throw new u('Argument number "' + l.text + '" out of order');
+                  m++, _.push([]);
+                } else {
+                  if (l.text === "EOF")
+                    throw new u("Expected a macro definition");
+                  _[m].push(l.text);
+                }
+              let {
+                tokens: x
+              } = e.gullet.consumeArg();
+              return b && x.unshift(b), (n === "\\edef" || n === "\\xdef") && (x = e.gullet.expandTokens(x), x.reverse()), e.gullet.macros.set(c, {
+                tokens: x,
+                numArgs: m,
+                delimiters: _
+              }, n === Hr[n]), {
+                type: "internal",
+                mode: e.mode
+              };
+            }
+          }), ne({
+            type: "internal",
+            names: [
+              "\\let",
+              "\\\\globallet"
+              // can’t be entered directly
+            ],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              primitive: !0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t;
+              const l = gi(e.gullet.popToken());
+              e.gullet.consumeSpaces();
+              const c = vu(e);
+              return bi(e, l, c, n === "\\\\globallet"), {
+                type: "internal",
+                mode: e.mode
+              };
+            }
+          }), ne({
+            type: "internal",
+            names: [
+              "\\futurelet",
+              "\\\\globalfuture"
+              // can’t be entered directly
+            ],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              primitive: !0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t;
+              const l = gi(e.gullet.popToken()), c = e.gullet.popToken(), m = e.gullet.popToken();
+              return bi(e, l, m, n === "\\\\globalfuture"), e.gullet.pushToken(m), e.gullet.pushToken(c), {
+                type: "internal",
+                mode: e.mode
+              };
+            }
+          });
+          const kn = function(t, e, n) {
+            const l = Le.math[t] && Le.math[t].replace, c = Wt(l || t, e, n);
+            if (!c)
+              throw new Error("Unsupported symbol " + t + " and font size " + e + ".");
+            return c;
+          }, Ur = function(t, e, n, l) {
+            const c = n.havingBaseStyle(e), m = O.makeSpan(l.concat(c.sizingClasses(n)), [t], n), b = c.sizeMultiplier / n.sizeMultiplier;
+            return m.height *= b, m.depth *= b, m.maxFontSize = c.sizeMultiplier, m;
+          }, wi = function(t, e, n) {
+            const l = e.havingBaseStyle(n), c = (1 - e.sizeMultiplier / l.sizeMultiplier) * e.fontMetrics().axisHeight;
+            t.classes.push("delimcenter"), t.style.top = $(c), t.height -= c, t.depth += c;
+          }, Au = function(t, e, n, l, c, m) {
+            const b = O.makeSymbol(t, "Main-Regular", c, l), _ = Ur(b, e, l, m);
+            return n && wi(_, l, e), _;
+          }, Su = function(t, e, n, l) {
+            return O.makeSymbol(t, "Size" + e + "-Regular", n, l);
+          }, yi = function(t, e, n, l, c, m) {
+            const b = Su(t, e, c, l), _ = Ur(O.makeSpan(["delimsizing", "size" + e], [b], l), ae.TEXT, l, m);
+            return n && wi(_, l, ae.TEXT), _;
+          }, Gr = function(t, e, n) {
+            let l;
+            return e === "Size1-Regular" ? l = "delim-size1" : l = "delim-size4", {
+              type: "elem",
+              elem: O.makeSpan(["delimsizinginner", l], [O.makeSpan([], [O.makeSymbol(t, e, n)])])
+            };
+          }, Vr = function(t, e, n) {
+            const l = gt["Size4-Regular"][t.charCodeAt(0)] ? gt["Size4-Regular"][t.charCodeAt(0)][4] : gt["Size1-Regular"][t.charCodeAt(0)][4], c = new Pt("inner", b0(t, Math.round(1e3 * e))), m = new St([c], {
+              width: $(l),
+              height: $(e),
+              // Override CSS rule `.katex svg { width: 100% }`
+              style: "width:" + $(l),
+              viewBox: "0 0 " + 1e3 * l + " " + Math.round(1e3 * e),
+              preserveAspectRatio: "xMinYMin"
+            }), b = O.makeSvgSpan([], [m], n);
+            return b.height = e, b.style.height = $(e), b.style.width = $(l), {
+              type: "elem",
+              elem: b
+            };
+          }, Wr = 8e-3, Qn = {
+            type: "kern",
+            size: -1 * Wr
+          }, Fu = ["|", "\\lvert", "\\rvert", "\\vert"], Eu = ["\\|", "\\lVert", "\\rVert", "\\Vert"], _i = function(t, e, n, l, c, m) {
+            let b, _, x, F, B = "", I = 0;
+            b = x = F = t, _ = null;
+            let q = "Size1-Regular";
+            t === "\\uparrow" ? x = F = "⏐" : t === "\\Uparrow" ? x = F = "‖" : t === "\\downarrow" ? b = x = "⏐" : t === "\\Downarrow" ? b = x = "‖" : t === "\\updownarrow" ? (b = "\\uparrow", x = "⏐", F = "\\downarrow") : t === "\\Updownarrow" ? (b = "\\Uparrow", x = "‖", F = "\\Downarrow") : R.contains(Fu, t) ? (x = "∣", B = "vert", I = 333) : R.contains(Eu, t) ? (x = "∥", B = "doublevert", I = 556) : t === "[" || t === "\\lbrack" ? (b = "⎡", x = "⎢", F = "⎣", q = "Size4-Regular", B = "lbrack", I = 667) : t === "]" || t === "\\rbrack" ? (b = "⎤", x = "⎥", F = "⎦", q = "Size4-Regular", B = "rbrack", I = 667) : t === "\\lfloor" || t === "⌊" ? (x = b = "⎢", F = "⎣", q = "Size4-Regular", B = "lfloor", I = 667) : t === "\\lceil" || t === "⌈" ? (b = "⎡", x = F = "⎢", q = "Size4-Regular", B = "lceil", I = 667) : t === "\\rfloor" || t === "⌋" ? (x = b = "⎥", F = "⎦", q = "Size4-Regular", B = "rfloor", I = 667) : t === "\\rceil" || t === "⌉" ? (b = "⎤", x = F = "⎥", q = "Size4-Regular", B = "rceil", I = 667) : t === "(" || t === "\\lparen" ? (b = "⎛", x = "⎜", F = "⎝", q = "Size4-Regular", B = "lparen", I = 875) : t === ")" || t === "\\rparen" ? (b = "⎞", x = "⎟", F = "⎠", q = "Size4-Regular", B = "rparen", I = 875) : t === "\\{" || t === "\\lbrace" ? (b = "⎧", _ = "⎨", F = "⎩", x = "⎪", q = "Size4-Regular") : t === "\\}" || t === "\\rbrace" ? (b = "⎫", _ = "⎬", F = "⎭", x = "⎪", q = "Size4-Regular") : t === "\\lgroup" || t === "⟮" ? (b = "⎧", F = "⎩", x = "⎪", q = "Size4-Regular") : t === "\\rgroup" || t === "⟯" ? (b = "⎫", F = "⎭", x = "⎪", q = "Size4-Regular") : t === "\\lmoustache" || t === "⎰" ? (b = "⎧", F = "⎭", x = "⎪", q = "Size4-Regular") : (t === "\\rmoustache" || t === "⎱") && (b = "⎫", F = "⎩", x = "⎪", q = "Size4-Regular");
+            const W = kn(b, q, c), se = W.height + W.depth, ue = kn(x, q, c), xe = ue.height + ue.depth, we = kn(F, q, c), De = we.height + we.depth;
+            let Fe = 0, qe = 1;
+            if (_ !== null) {
+              const Ye = kn(_, q, c);
+              Fe = Ye.height + Ye.depth, qe = 2;
+            }
+            const lt = se + De + Fe, $e = Math.max(0, Math.ceil((e - lt) / (qe * xe))), Tt = lt + $e * qe * xe;
+            let rn = l.fontMetrics().axisHeight;
+            n && (rn *= l.sizeMultiplier);
+            const Ae = Tt / 2 - rn, Te = [];
+            if (B.length > 0) {
+              const Ye = Tt - se - De, je = Math.round(Tt * 1e3), Mt = K0(B, Math.round(Ye * 1e3)), e1 = new Pt(B, Mt), cl = (I / 1e3).toFixed(3) + "em", hl = (je / 1e3).toFixed(3) + "em", t1 = new St([e1], {
+                width: cl,
+                height: hl,
+                viewBox: "0 0 " + I + " " + je
+              }), nr = O.makeSvgSpan([], [t1], l);
+              nr.height = je / 1e3, nr.style.width = cl, nr.style.height = hl, Te.push({
+                type: "elem",
+                elem: nr
+              });
+            } else {
+              if (Te.push(Gr(F, q, c)), Te.push(Qn), _ === null) {
+                const Ye = Tt - se - De + 2 * Wr;
+                Te.push(Vr(x, Ye, l));
+              } else {
+                const Ye = (Tt - se - De - Fe) / 2 + 2 * Wr;
+                Te.push(Vr(x, Ye, l)), Te.push(Qn), Te.push(Gr(_, q, c)), Te.push(Qn), Te.push(Vr(x, Ye, l));
+              }
+              Te.push(Qn), Te.push(Gr(b, q, c));
+            }
+            const He = l.havingBaseStyle(ae.TEXT), Ve = O.makeVList({
+              positionType: "bottom",
+              positionData: Ae,
+              children: Te
+            }, He);
+            return Ur(O.makeSpan(["delimsizing", "mult"], [Ve], He), ae.TEXT, l, m);
+          }, jr = 80, Xr = 0.08, Yr = function(t, e, n, l, c) {
+            const m = pn(t, l, n), b = new Pt(t, m), _ = new St([b], {
+              // Note: 1000:1 ratio of viewBox to document em width.
+              width: "400em",
+              height: $(e),
+              viewBox: "0 0 400000 " + n,
+              preserveAspectRatio: "xMinYMin slice"
+            });
+            return O.makeSvgSpan(["hide-tail"], [_], c);
+          }, Cu = function(t, e) {
+            const n = e.havingBaseSizing(), l = vi("\\surd", t * n.sizeMultiplier, Di, n);
+            let c = n.sizeMultiplier;
+            const m = Math.max(0, e.minRuleThickness - e.fontMetrics().sqrtRuleThickness);
+            let b, _ = 0, x = 0, F = 0, B;
+            return l.type === "small" ? (F = 1e3 + 1e3 * m + jr, t < 1 ? c = 1 : t < 1.4 && (c = 0.7), _ = (1 + m + Xr) / c, x = (1 + m) / c, b = Yr("sqrtMain", _, F, m, e), b.style.minWidth = "0.853em", B = 0.833 / c) : l.type === "large" ? (F = (1e3 + jr) * xn[l.size], x = (xn[l.size] + m) / c, _ = (xn[l.size] + m + Xr) / c, b = Yr("sqrtSize" + l.size, _, F, m, e), b.style.minWidth = "1.02em", B = 1 / c) : (_ = t + m + Xr, x = t + m, F = Math.floor(1e3 * t + m) + jr, b = Yr("sqrtTall", _, F, m, e), b.style.minWidth = "0.742em", B = 1.056), b.height = x, b.style.height = $(_), {
+              span: b,
+              advanceWidth: B,
+              // Calculate the actual line width.
+              // This actually should depend on the chosen font -- e.g. \boldmath
+              // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and
+              // have thicker rules.
+              ruleWidth: (e.fontMetrics().sqrtRuleThickness + m) * c
+            };
+          }, ki = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "⌊", "⌋", "\\lceil", "\\rceil", "⌈", "⌉", "\\surd"], Tu = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "⟮", "⟯", "\\lmoustache", "\\rmoustache", "⎰", "⎱"], xi = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"], xn = [0, 1.2, 1.8, 2.4, 3], Mu = function(t, e, n, l, c) {
+            if (t === "<" || t === "\\lt" || t === "⟨" ? t = "\\langle" : (t === ">" || t === "\\gt" || t === "⟩") && (t = "\\rangle"), R.contains(ki, t) || R.contains(xi, t))
+              return yi(t, e, !1, n, l, c);
+            if (R.contains(Tu, t))
+              return _i(t, xn[e], !1, n, l, c);
+            throw new u("Illegal delimiter: '" + t + "'");
+          }, zu = [{
+            type: "small",
+            style: ae.SCRIPTSCRIPT
+          }, {
+            type: "small",
+            style: ae.SCRIPT
+          }, {
+            type: "small",
+            style: ae.TEXT
+          }, {
+            type: "large",
+            size: 1
+          }, {
+            type: "large",
+            size: 2
+          }, {
+            type: "large",
+            size: 3
+          }, {
+            type: "large",
+            size: 4
+          }], Bu = [{
+            type: "small",
+            style: ae.SCRIPTSCRIPT
+          }, {
+            type: "small",
+            style: ae.SCRIPT
+          }, {
+            type: "small",
+            style: ae.TEXT
+          }, {
+            type: "stack"
+          }], Di = [{
+            type: "small",
+            style: ae.SCRIPTSCRIPT
+          }, {
+            type: "small",
+            style: ae.SCRIPT
+          }, {
+            type: "small",
+            style: ae.TEXT
+          }, {
+            type: "large",
+            size: 1
+          }, {
+            type: "large",
+            size: 2
+          }, {
+            type: "large",
+            size: 3
+          }, {
+            type: "large",
+            size: 4
+          }, {
+            type: "stack"
+          }], Nu = function(t) {
+            if (t.type === "small")
+              return "Main-Regular";
+            if (t.type === "large")
+              return "Size" + t.size + "-Regular";
+            if (t.type === "stack")
+              return "Size4-Regular";
+            throw new Error("Add support for delim type '" + t.type + "' here.");
+          }, vi = function(t, e, n, l) {
+            const c = Math.min(2, 3 - l.style.size);
+            for (let m = c; m < n.length && n[m].type !== "stack"; m++) {
+              const b = kn(t, Nu(n[m]), "math");
+              let _ = b.height + b.depth;
+              if (n[m].type === "small") {
+                const x = l.havingBaseStyle(n[m].style);
+                _ *= x.sizeMultiplier;
+              }
+              if (_ > e)
+                return n[m];
+            }
+            return n[n.length - 1];
+          }, Ai = function(t, e, n, l, c, m) {
+            t === "<" || t === "\\lt" || t === "⟨" ? t = "\\langle" : (t === ">" || t === "\\gt" || t === "��") && (t = "\\rangle");
+            let b;
+            R.contains(xi, t) ? b = zu : R.contains(ki, t) ? b = Di : b = Bu;
+            const _ = vi(t, e, b, l);
+            return _.type === "small" ? Au(t, _.style, n, l, c, m) : _.type === "large" ? yi(t, _.size, n, l, c, m) : _i(t, e, n, l, c, m);
+          };
+          var d0 = {
+            sqrtImage: Cu,
+            sizedDelim: Mu,
+            sizeToMaxHeight: xn,
+            customSizedDelim: Ai,
+            leftRightDelim: function(t, e, n, l, c, m) {
+              const b = l.fontMetrics().axisHeight * l.sizeMultiplier, _ = 901, x = 5 / l.fontMetrics().ptPerEm, F = Math.max(e - b, n + b), B = Math.max(
+                // In real TeX, calculations are done using integral values which are
+                // 65536 per pt, or 655360 per em. So, the division here truncates in
+                // TeX but doesn't here, producing different results. If we wanted to
+                // exactly match TeX's calculation, we could do
+                //   Math.floor(655360 * maxDistFromAxis / 500) *
+                //    delimiterFactor / 655360
+                // (To see the difference, compare
+                //    x^{x^{\left(\rule{0.1em}{0.68em}\right)}}
+                // in TeX and KaTeX)
+                F / 500 * _,
+                2 * F - x
+              );
+              return Ai(t, B, !0, l, c, m);
+            }
+          };
+          const Si = {
+            "\\bigl": {
+              mclass: "mopen",
+              size: 1
+            },
+            "\\Bigl": {
+              mclass: "mopen",
+              size: 2
+            },
+            "\\biggl": {
+              mclass: "mopen",
+              size: 3
+            },
+            "\\Biggl": {
+              mclass: "mopen",
+              size: 4
+            },
+            "\\bigr": {
+              mclass: "mclose",
+              size: 1
+            },
+            "\\Bigr": {
+              mclass: "mclose",
+              size: 2
+            },
+            "\\biggr": {
+              mclass: "mclose",
+              size: 3
+            },
+            "\\Biggr": {
+              mclass: "mclose",
+              size: 4
+            },
+            "\\bigm": {
+              mclass: "mrel",
+              size: 1
+            },
+            "\\Bigm": {
+              mclass: "mrel",
+              size: 2
+            },
+            "\\biggm": {
+              mclass: "mrel",
+              size: 3
+            },
+            "\\Biggm": {
+              mclass: "mrel",
+              size: 4
+            },
+            "\\big": {
+              mclass: "mord",
+              size: 1
+            },
+            "\\Big": {
+              mclass: "mord",
+              size: 2
+            },
+            "\\bigg": {
+              mclass: "mord",
+              size: 3
+            },
+            "\\Bigg": {
+              mclass: "mord",
+              size: 4
+            }
+          }, Ru = ["(", "\\lparen", ")", "\\rparen", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "⌊", "⌋", "\\lceil", "\\rceil", "⌈", "⌉", "<", ">", "\\langle", "⟨", "\\rangle", "⟩", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "⟮", "⟯", "\\lmoustache", "\\rmoustache", "⎰", "⎱", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."];
+          function Jn(t, e) {
+            const n = Yn(t);
+            if (n && R.contains(Ru, n.text))
+              return n;
+            throw n ? new u("Invalid delimiter '" + n.text + "' after '" + e.funcName + "'", t) : new u("Invalid delimiter type '" + t.type + "'", t);
+          }
+          ne({
+            type: "delimsizing",
+            names: ["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"],
+            props: {
+              numArgs: 1,
+              argTypes: ["primitive"]
+            },
+            handler: (t, e) => {
+              const n = Jn(e[0], t);
+              return {
+                type: "delimsizing",
+                mode: t.parser.mode,
+                size: Si[t.funcName].size,
+                mclass: Si[t.funcName].mclass,
+                delim: n.text
+              };
+            },
+            htmlBuilder: (t, e) => t.delim === "." ? O.makeSpan([t.mclass]) : d0.sizedDelim(t.delim, t.size, e, t.mode, [t.mclass]),
+            mathmlBuilder: (t) => {
+              const e = [];
+              t.delim !== "." && e.push(Et(t.delim, t.mode));
+              const n = new Y.MathNode("mo", e);
+              t.mclass === "mopen" || t.mclass === "mclose" ? n.setAttribute("fence", "true") : n.setAttribute("fence", "false"), n.setAttribute("stretchy", "true");
+              const l = $(d0.sizeToMaxHeight[t.size]);
+              return n.setAttribute("minsize", l), n.setAttribute("maxsize", l), n;
+            }
+          });
+          function Fi(t) {
+            if (!t.body)
+              throw new Error("Bug: The leftright ParseNode wasn't fully parsed.");
+          }
+          ne({
+            type: "leftright-right",
+            names: ["\\right"],
+            props: {
+              numArgs: 1,
+              primitive: !0
+            },
+            handler: (t, e) => {
+              const n = t.parser.gullet.macros.get("\\current@color");
+              if (n && typeof n != "string")
+                throw new u("\\current@color set to non-string in \\right");
+              return {
+                type: "leftright-right",
+                mode: t.parser.mode,
+                delim: Jn(e[0], t).text,
+                color: n
+                // undefined if not set via \color
+              };
+            }
+          }), ne({
+            type: "leftright",
+            names: ["\\left"],
+            props: {
+              numArgs: 1,
+              primitive: !0
+            },
+            handler: (t, e) => {
+              const n = Jn(e[0], t), l = t.parser;
+              ++l.leftrightDepth;
+              const c = l.parseExpression(!1);
+              --l.leftrightDepth, l.expect("\\right", !1);
+              const m = pe(l.parseFunction(), "leftright-right");
+              return {
+                type: "leftright",
+                mode: l.mode,
+                body: c,
+                left: n.text,
+                right: m.delim,
+                rightColor: m.color
+              };
+            },
+            htmlBuilder: (t, e) => {
+              Fi(t);
+              const n = Je(t.body, e, !0, ["mopen", "mclose"]);
+              let l = 0, c = 0, m = !1;
+              for (let x = 0; x < n.length; x++)
+                n[x].isMiddle ? m = !0 : (l = Math.max(n[x].height, l), c = Math.max(n[x].depth, c));
+              l *= e.sizeMultiplier, c *= e.sizeMultiplier;
+              let b;
+              if (t.left === "." ? b = yn(e, ["mopen"]) : b = d0.leftRightDelim(t.left, l, c, e, t.mode, ["mopen"]), n.unshift(b), m)
+                for (let x = 1; x < n.length; x++) {
+                  const B = n[x].isMiddle;
+                  B && (n[x] = d0.leftRightDelim(B.delim, l, c, B.options, t.mode, []));
+                }
+              let _;
+              if (t.right === ".")
+                _ = yn(e, ["mclose"]);
+              else {
+                const x = t.rightColor ? e.withColor(t.rightColor) : e;
+                _ = d0.leftRightDelim(t.right, l, c, x, t.mode, ["mclose"]);
+              }
+              return n.push(_), O.makeSpan(["minner"], n, e);
+            },
+            mathmlBuilder: (t, e) => {
+              Fi(t);
+              const n = dt(t.body, e);
+              if (t.left !== ".") {
+                const l = new Y.MathNode("mo", [Et(t.left, t.mode)]);
+                l.setAttribute("fence", "true"), n.unshift(l);
+              }
+              if (t.right !== ".") {
+                const l = new Y.MathNode("mo", [Et(t.right, t.mode)]);
+                l.setAttribute("fence", "true"), t.rightColor && l.setAttribute("mathcolor", t.rightColor), n.push(l);
+              }
+              return Lr(n);
+            }
+          }), ne({
+            type: "middle",
+            names: ["\\middle"],
+            props: {
+              numArgs: 1,
+              primitive: !0
+            },
+            handler: (t, e) => {
+              const n = Jn(e[0], t);
+              if (!t.parser.leftrightDepth)
+                throw new u("\\middle without preceding \\left", n);
+              return {
+                type: "middle",
+                mode: t.parser.mode,
+                delim: n.text
+              };
+            },
+            htmlBuilder: (t, e) => {
+              let n;
+              if (t.delim === ".")
+                n = yn(e, []);
+              else {
+                n = d0.sizedDelim(t.delim, 1, e, t.mode, []);
+                const l = {
+                  delim: t.delim,
+                  options: e
+                };
+                n.isMiddle = l;
+              }
+              return n;
+            },
+            mathmlBuilder: (t, e) => {
+              const n = t.delim === "\\vert" || t.delim === "|" ? Et("|", "text") : Et(t.delim, t.mode), l = new Y.MathNode("mo", [n]);
+              return l.setAttribute("fence", "true"), l.setAttribute("lspace", "0.05em"), l.setAttribute("rspace", "0.05em"), l;
+            }
+          });
+          const Zr = (t, e) => {
+            const n = O.wrapFragment(ve(t.body, e), e), l = t.label.slice(1);
+            let c = e.sizeMultiplier, m, b = 0;
+            const _ = R.isCharacterBox(t.body);
+            if (l === "sout")
+              m = O.makeSpan(["stretchy", "sout"]), m.height = e.fontMetrics().defaultRuleThickness / c, b = -0.5 * e.fontMetrics().xHeight;
+            else if (l === "phase") {
+              const F = Ne({
+                number: 0.6,
+                unit: "pt"
+              }, e), B = Ne({
+                number: 0.35,
+                unit: "ex"
+              }, e), I = e.havingBaseSizing();
+              c = c / I.sizeMultiplier;
+              const q = n.height + n.depth + F + B;
+              n.style.paddingLeft = $(q / 2 + F);
+              const W = Math.floor(1e3 * q * c), se = Ot(W), ue = new St([new Pt("phase", se)], {
+                width: "400em",
+                height: $(W / 1e3),
+                viewBox: "0 0 400000 " + W,
+                preserveAspectRatio: "xMinYMin slice"
+              });
+              m = O.makeSvgSpan(["hide-tail"], [ue], e), m.style.height = $(q), b = n.depth + F + B;
+            } else {
+              /cancel/.test(l) ? _ || n.classes.push("cancel-pad") : l === "angl" ? n.classes.push("anglpad") : n.classes.push("boxpad");
+              let F = 0, B = 0, I = 0;
+              /box/.test(l) ? (I = Math.max(
+                e.fontMetrics().fboxrule,
+                // default
+                e.minRuleThickness
+                // User override.
+              ), F = e.fontMetrics().fboxsep + (l === "colorbox" ? 0 : I), B = F) : l === "angl" ? (I = Math.max(e.fontMetrics().defaultRuleThickness, e.minRuleThickness), F = 4 * I, B = Math.max(0, 0.25 - n.depth)) : (F = _ ? 0.2 : 0, B = F), m = f0.encloseSpan(n, l, F, B, e), /fbox|boxed|fcolorbox/.test(l) ? (m.style.borderStyle = "solid", m.style.borderWidth = $(I)) : l === "angl" && I !== 0.049 && (m.style.borderTopWidth = $(I), m.style.borderRightWidth = $(I)), b = n.depth + B, t.backgroundColor && (m.style.backgroundColor = t.backgroundColor, t.borderColor && (m.style.borderColor = t.borderColor));
+            }
+            let x;
+            if (t.backgroundColor)
+              x = O.makeVList({
+                positionType: "individualShift",
+                children: [
+                  // Put the color background behind inner;
+                  {
+                    type: "elem",
+                    elem: m,
+                    shift: b
+                  },
+                  {
+                    type: "elem",
+                    elem: n,
+                    shift: 0
+                  }
+                ]
+              }, e);
+            else {
+              const F = /cancel|phase/.test(l) ? ["svg-align"] : [];
+              x = O.makeVList({
+                positionType: "individualShift",
+                children: [
+                  // Write the \cancel stroke on top of inner.
+                  {
+                    type: "elem",
+                    elem: n,
+                    shift: 0
+                  },
+                  {
+                    type: "elem",
+                    elem: m,
+                    shift: b,
+                    wrapperClasses: F
+                  }
+                ]
+              }, e);
+            }
+            return /cancel/.test(l) && (x.height = n.height, x.depth = n.depth), /cancel/.test(l) && !_ ? O.makeSpan(["mord", "cancel-lap"], [x], e) : O.makeSpan(["mord"], [x], e);
+          }, Kr = (t, e) => {
+            let n = 0;
+            const l = new Y.MathNode(t.label.indexOf("colorbox") > -1 ? "mpadded" : "menclose", [Ie(t.body, e)]);
+            switch (t.label) {
+              case "\\cancel":
+                l.setAttribute("notation", "updiagonalstrike");
+                break;
+              case "\\bcancel":
+                l.setAttribute("notation", "downdiagonalstrike");
+                break;
+              case "\\phase":
+                l.setAttribute("notation", "phasorangle");
+                break;
+              case "\\sout":
+                l.setAttribute("notation", "horizontalstrike");
+                break;
+              case "\\fbox":
+                l.setAttribute("notation", "box");
+                break;
+              case "\\angl":
+                l.setAttribute("notation", "actuarial");
+                break;
+              case "\\fcolorbox":
+              case "\\colorbox":
+                if (n = e.fontMetrics().fboxsep * e.fontMetrics().ptPerEm, l.setAttribute("width", "+" + 2 * n + "pt"), l.setAttribute("height", "+" + 2 * n + "pt"), l.setAttribute("lspace", n + "pt"), l.setAttribute("voffset", n + "pt"), t.label === "\\fcolorbox") {
+                  const c = Math.max(
+                    e.fontMetrics().fboxrule,
+                    // default
+                    e.minRuleThickness
+                    // user override
+                  );
+                  l.setAttribute("style", "border: " + c + "em solid " + String(t.borderColor));
+                }
+                break;
+              case "\\xcancel":
+                l.setAttribute("notation", "updiagonalstrike downdiagonalstrike");
+                break;
+            }
+            return t.backgroundColor && l.setAttribute("mathbackground", t.backgroundColor), l;
+          };
+          ne({
+            type: "enclose",
+            names: ["\\colorbox"],
+            props: {
+              numArgs: 2,
+              allowedInText: !0,
+              argTypes: ["color", "text"]
+            },
+            handler(t, e, n) {
+              let {
+                parser: l,
+                funcName: c
+              } = t;
+              const m = pe(e[0], "color-token").color, b = e[1];
+              return {
+                type: "enclose",
+                mode: l.mode,
+                label: c,
+                backgroundColor: m,
+                body: b
+              };
+            },
+            htmlBuilder: Zr,
+            mathmlBuilder: Kr
+          }), ne({
+            type: "enclose",
+            names: ["\\fcolorbox"],
+            props: {
+              numArgs: 3,
+              allowedInText: !0,
+              argTypes: ["color", "color", "text"]
+            },
+            handler(t, e, n) {
+              let {
+                parser: l,
+                funcName: c
+              } = t;
+              const m = pe(e[0], "color-token").color, b = pe(e[1], "color-token").color, _ = e[2];
+              return {
+                type: "enclose",
+                mode: l.mode,
+                label: c,
+                backgroundColor: b,
+                borderColor: m,
+                body: _
+              };
+            },
+            htmlBuilder: Zr,
+            mathmlBuilder: Kr
+          }), ne({
+            type: "enclose",
+            names: ["\\fbox"],
+            props: {
+              numArgs: 1,
+              argTypes: ["hbox"],
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "enclose",
+                mode: n.mode,
+                label: "\\fbox",
+                body: e[0]
+              };
+            }
+          }), ne({
+            type: "enclose",
+            names: ["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\phase"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "enclose",
+                mode: n.mode,
+                label: l,
+                body: c
+              };
+            },
+            htmlBuilder: Zr,
+            mathmlBuilder: Kr
+          }), ne({
+            type: "enclose",
+            names: ["\\angl"],
+            props: {
+              numArgs: 1,
+              argTypes: ["hbox"],
+              allowedInText: !1
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "enclose",
+                mode: n.mode,
+                label: "\\angl",
+                body: e[0]
+              };
+            }
+          });
+          const Ei = {};
+          function Qt(t) {
+            let {
+              type: e,
+              names: n,
+              props: l,
+              handler: c,
+              htmlBuilder: m,
+              mathmlBuilder: b
+            } = t;
+            const _ = {
+              type: e,
+              numArgs: l.numArgs || 0,
+              allowedInText: !1,
+              numOptionalArgs: 0,
+              handler: c
+            };
+            for (let x = 0; x < n.length; ++x)
+              Ei[n[x]] = _;
+            m && (Vn[e] = m), b && (Wn[e] = b);
+          }
+          const Ci = {};
+          function k(t, e) {
+            Ci[t] = e;
+          }
+          class bt {
+            // The + prefix indicates that these fields aren't writeable
+            // Lexer holding the input string.
+            // Start offset, zero-based inclusive.
+            // End offset, zero-based exclusive.
+            constructor(e, n, l) {
+              this.lexer = void 0, this.start = void 0, this.end = void 0, this.lexer = e, this.start = n, this.end = l;
+            }
+            /**
+             * Merges two `SourceLocation`s from location providers, given they are
+             * provided in order of appearance.
+             * - Returns the first one's location if only the first is provided.
+             * - Returns a merged range of the first and the last if both are provided
+             *   and their lexers match.
+             * - Otherwise, returns null.
+             */
+            static range(e, n) {
+              return n ? !e || !e.loc || !n.loc || e.loc.lexer !== n.loc.lexer ? null : new bt(e.loc.lexer, e.loc.start, n.loc.end) : e && e.loc;
+            }
+          }
+          class Ct {
+            // don't expand the token
+            // used in \noexpand
+            constructor(e, n) {
+              this.text = void 0, this.loc = void 0, this.noexpand = void 0, this.treatAsRelax = void 0, this.text = e, this.loc = n;
+            }
+            /**
+             * Given a pair of tokens (this and endToken), compute a `Token` encompassing
+             * the whole input range enclosed by these two.
+             */
+            range(e, n) {
+              return new Ct(n, bt.range(this, e));
+            }
+          }
+          function Ti(t) {
+            const e = [];
+            t.consumeSpaces();
+            let n = t.fetch().text;
+            for (n === "\\relax" && (t.consume(), t.consumeSpaces(), n = t.fetch().text); n === "\\hline" || n === "\\hdashline"; )
+              t.consume(), e.push(n === "\\hdashline"), t.consumeSpaces(), n = t.fetch().text;
+            return e;
+          }
+          const $n = (t) => {
+            if (!t.parser.settings.displayMode)
+              throw new u("{" + t.envName + "} can be used only in display mode.");
+          };
+          function Qr(t) {
+            if (t.indexOf("ed") === -1)
+              return t.indexOf("*") === -1;
+          }
+          function A0(t, e, n) {
+            let {
+              hskipBeforeAndAfter: l,
+              addJot: c,
+              cols: m,
+              arraystretch: b,
+              colSeparationType: _,
+              autoTag: x,
+              singleRow: F,
+              emptySingleRow: B,
+              maxNumCols: I,
+              leqno: q
+            } = e;
+            if (t.gullet.beginGroup(), F || t.gullet.macros.set("\\cr", "\\\\\\relax"), !b) {
+              const qe = t.gullet.expandMacroAsText("\\arraystretch");
+              if (qe == null)
+                b = 1;
+              else if (b = parseFloat(qe), !b || b < 0)
+                throw new u("Invalid \\arraystretch: " + qe);
+            }
+            t.gullet.beginGroup();
+            let W = [];
+            const se = [W], ue = [], xe = [], we = x != null ? [] : void 0;
+            function De() {
+              x && t.gullet.macros.set("\\@eqnsw", "1", !0);
+            }
+            function Fe() {
+              we && (t.gullet.macros.get("\\df@tag") ? (we.push(t.subparse([new Ct("\\df@tag")])), t.gullet.macros.set("\\df@tag", void 0, !0)) : we.push(!!x && t.gullet.macros.get("\\@eqnsw") === "1"));
+            }
+            for (De(), xe.push(Ti(t)); ; ) {
+              let qe = t.parseExpression(!1, F ? "\\end" : "\\\\");
+              t.gullet.endGroup(), t.gullet.beginGroup(), qe = {
+                type: "ordgroup",
+                mode: t.mode,
+                body: qe
+              }, n && (qe = {
+                type: "styling",
+                mode: t.mode,
+                style: n,
+                body: [qe]
+              }), W.push(qe);
+              const lt = t.fetch().text;
+              if (lt === "&") {
+                if (I && W.length === I) {
+                  if (F || _)
+                    throw new u("Too many tab characters: &", t.nextToken);
+                  t.settings.reportNonstrict("textEnv", "Too few columns specified in the {array} column argument.");
+                }
+                t.consume();
+              } else if (lt === "\\end") {
+                Fe(), W.length === 1 && qe.type === "styling" && qe.body[0].body.length === 0 && (se.length > 1 || !B) && se.pop(), xe.length < se.length + 1 && xe.push([]);
+                break;
+              } else if (lt === "\\\\") {
+                t.consume();
+                let $e;
+                t.gullet.future().text !== " " && ($e = t.parseSizeGroup(!0)), ue.push($e ? $e.value : null), Fe(), xe.push(Ti(t)), W = [], se.push(W), De();
+              } else
+                throw new u("Expected & or \\\\ or \\cr or \\end", t.nextToken);
+            }
+            return t.gullet.endGroup(), t.gullet.endGroup(), {
+              type: "array",
+              mode: t.mode,
+              addJot: c,
+              arraystretch: b,
+              body: se,
+              cols: m,
+              rowGaps: ue,
+              hskipBeforeAndAfter: l,
+              hLinesBeforeRow: xe,
+              colSeparationType: _,
+              tags: we,
+              leqno: q
+            };
+          }
+          function Jr(t) {
+            return t.slice(0, 1) === "d" ? "display" : "text";
+          }
+          const Jt = function(t, e) {
+            let n, l;
+            const c = t.body.length, m = t.hLinesBeforeRow;
+            let b = 0, _ = new Array(c);
+            const x = [], F = Math.max(
+              // From LaTeX \showthe\arrayrulewidth. Equals 0.04 em.
+              e.fontMetrics().arrayRuleWidth,
+              e.minRuleThickness
+              // User override.
+            ), B = 1 / e.fontMetrics().ptPerEm;
+            let I = 5 * B;
+            t.colSeparationType && t.colSeparationType === "small" && (I = 0.2778 * (e.havingStyle(ae.SCRIPT).sizeMultiplier / e.sizeMultiplier));
+            const q = t.colSeparationType === "CD" ? Ne({
+              number: 3,
+              unit: "ex"
+            }, e) : 12 * B, W = 3 * B, se = t.arraystretch * q, ue = 0.7 * se, xe = 0.3 * se;
+            let we = 0;
+            function De(Ae) {
+              for (let Te = 0; Te < Ae.length; ++Te)
+                Te > 0 && (we += 0.25), x.push({
+                  pos: we,
+                  isDashed: Ae[Te]
+                });
+            }
+            for (De(m[0]), n = 0; n < t.body.length; ++n) {
+              const Ae = t.body[n];
+              let Te = ue, He = xe;
+              b < Ae.length && (b = Ae.length);
+              const Ve = new Array(Ae.length);
+              for (l = 0; l < Ae.length; ++l) {
+                const Mt = ve(Ae[l], e);
+                He < Mt.depth && (He = Mt.depth), Te < Mt.height && (Te = Mt.height), Ve[l] = Mt;
+              }
+              const Ye = t.rowGaps[n];
+              let je = 0;
+              Ye && (je = Ne(Ye, e), je > 0 && (je += xe, He < je && (He = je), je = 0)), t.addJot && (He += W), Ve.height = Te, Ve.depth = He, we += Te, Ve.pos = we, we += He + je, _[n] = Ve, De(m[n + 1]);
+            }
+            const Fe = we / 2 + e.fontMetrics().axisHeight, qe = t.cols || [], lt = [];
+            let $e, Tt;
+            const rn = [];
+            if (t.tags && t.tags.some((Ae) => Ae))
+              for (n = 0; n < c; ++n) {
+                const Ae = _[n], Te = Ae.pos - Fe, He = t.tags[n];
+                let Ve;
+                He === !0 ? Ve = O.makeSpan(["eqn-num"], [], e) : He === !1 ? Ve = O.makeSpan([], [], e) : Ve = O.makeSpan([], Je(He, e, !0), e), Ve.depth = Ae.depth, Ve.height = Ae.height, rn.push({
+                  type: "elem",
+                  elem: Ve,
+                  shift: Te
+                });
+              }
+            for (
+              l = 0, Tt = 0;
+              // Continue while either there are more columns or more column
+              // descriptions, so trailing separators don't get lost.
+              l < b || Tt < qe.length;
+              ++l, ++Tt
+            ) {
+              let Ae = qe[Tt] || {}, Te = !0;
+              for (; Ae.type === "separator"; ) {
+                if (Te || ($e = O.makeSpan(["arraycolsep"], []), $e.style.width = $(e.fontMetrics().doubleRuleSep), lt.push($e)), Ae.separator === "|" || Ae.separator === ":") {
+                  const Ye = Ae.separator === "|" ? "solid" : "dashed", je = O.makeSpan(["vertical-separator"], [], e);
+                  je.style.height = $(we), je.style.borderRightWidth = $(F), je.style.borderRightStyle = Ye, je.style.margin = "0 " + $(-F / 2);
+                  const Mt = we - Fe;
+                  Mt && (je.style.verticalAlign = $(-Mt)), lt.push(je);
+                } else
+                  throw new u("Invalid separator type: " + Ae.separator);
+                Tt++, Ae = qe[Tt] || {}, Te = !1;
+              }
+              if (l >= b)
+                continue;
+              let He;
+              (l > 0 || t.hskipBeforeAndAfter) && (He = R.deflt(Ae.pregap, I), He !== 0 && ($e = O.makeSpan(["arraycolsep"], []), $e.style.width = $(He), lt.push($e)));
+              let Ve = [];
+              for (n = 0; n < c; ++n) {
+                const Ye = _[n], je = Ye[l];
+                if (!je)
+                  continue;
+                const Mt = Ye.pos - Fe;
+                je.depth = Ye.depth, je.height = Ye.height, Ve.push({
+                  type: "elem",
+                  elem: je,
+                  shift: Mt
+                });
+              }
+              Ve = O.makeVList({
+                positionType: "individualShift",
+                children: Ve
+              }, e), Ve = O.makeSpan(["col-align-" + (Ae.align || "c")], [Ve]), lt.push(Ve), (l < b - 1 || t.hskipBeforeAndAfter) && (He = R.deflt(Ae.postgap, I), He !== 0 && ($e = O.makeSpan(["arraycolsep"], []), $e.style.width = $(He), lt.push($e)));
+            }
+            if (_ = O.makeSpan(["mtable"], lt), x.length > 0) {
+              const Ae = O.makeLineSpan("hline", e, F), Te = O.makeLineSpan("hdashline", e, F), He = [{
+                type: "elem",
+                elem: _,
+                shift: 0
+              }];
+              for (; x.length > 0; ) {
+                const Ve = x.pop(), Ye = Ve.pos - Fe;
+                Ve.isDashed ? He.push({
+                  type: "elem",
+                  elem: Te,
+                  shift: Ye
+                }) : He.push({
+                  type: "elem",
+                  elem: Ae,
+                  shift: Ye
+                });
+              }
+              _ = O.makeVList({
+                positionType: "individualShift",
+                children: He
+              }, e);
+            }
+            if (rn.length === 0)
+              return O.makeSpan(["mord"], [_], e);
+            {
+              let Ae = O.makeVList({
+                positionType: "individualShift",
+                children: rn
+              }, e);
+              return Ae = O.makeSpan(["tag"], [Ae], e), O.makeFragment([_, Ae]);
+            }
+          }, Iu = {
+            c: "center ",
+            l: "left ",
+            r: "right "
+          }, $t = function(t, e) {
+            const n = [], l = new Y.MathNode("mtd", [], ["mtr-glue"]), c = new Y.MathNode("mtd", [], ["mml-eqn-num"]);
+            for (let I = 0; I < t.body.length; I++) {
+              const q = t.body[I], W = [];
+              for (let se = 0; se < q.length; se++)
+                W.push(new Y.MathNode("mtd", [Ie(q[se], e)]));
+              t.tags && t.tags[I] && (W.unshift(l), W.push(l), t.leqno ? W.unshift(c) : W.push(c)), n.push(new Y.MathNode("mtr", W));
+            }
+            let m = new Y.MathNode("mtable", n);
+            const b = t.arraystretch === 0.5 ? 0.1 : 0.16 + t.arraystretch - 1 + (t.addJot ? 0.09 : 0);
+            m.setAttribute("rowspacing", $(b));
+            let _ = "", x = "";
+            if (t.cols && t.cols.length > 0) {
+              const I = t.cols;
+              let q = "", W = !1, se = 0, ue = I.length;
+              I[0].type === "separator" && (_ += "top ", se = 1), I[I.length - 1].type === "separator" && (_ += "bottom ", ue -= 1);
+              for (let xe = se; xe < ue; xe++)
+                I[xe].type === "align" ? (x += Iu[I[xe].align], W && (q += "none "), W = !0) : I[xe].type === "separator" && W && (q += I[xe].separator === "|" ? "solid " : "dashed ", W = !1);
+              m.setAttribute("columnalign", x.trim()), /[sd]/.test(q) && m.setAttribute("columnlines", q.trim());
+            }
+            if (t.colSeparationType === "align") {
+              const I = t.cols || [];
+              let q = "";
+              for (let W = 1; W < I.length; W++)
+                q += W % 2 ? "0em " : "1em ";
+              m.setAttribute("columnspacing", q.trim());
+            } else
+              t.colSeparationType === "alignat" || t.colSeparationType === "gather" ? m.setAttribute("columnspacing", "0em") : t.colSeparationType === "small" ? m.setAttribute("columnspacing", "0.2778em") : t.colSeparationType === "CD" ? m.setAttribute("columnspacing", "0.5em") : m.setAttribute("columnspacing", "1em");
+            let F = "";
+            const B = t.hLinesBeforeRow;
+            _ += B[0].length > 0 ? "left " : "", _ += B[B.length - 1].length > 0 ? "right " : "";
+            for (let I = 1; I < B.length - 1; I++)
+              F += B[I].length === 0 ? "none " : B[I][0] ? "dashed " : "solid ";
+            return /[sd]/.test(F) && m.setAttribute("rowlines", F.trim()), _ !== "" && (m = new Y.MathNode("menclose", [m]), m.setAttribute("notation", _.trim())), t.arraystretch && t.arraystretch < 1 && (m = new Y.MathNode("mstyle", [m]), m.setAttribute("scriptlevel", "1")), m;
+          }, Mi = function(t, e) {
+            t.envName.indexOf("ed") === -1 && $n(t);
+            const n = [], l = t.envName.indexOf("at") > -1 ? "alignat" : "align", c = t.envName === "split", m = A0(t.parser, {
+              cols: n,
+              addJot: !0,
+              autoTag: c ? void 0 : Qr(t.envName),
+              emptySingleRow: !0,
+              colSeparationType: l,
+              maxNumCols: c ? 2 : void 0,
+              leqno: t.parser.settings.leqno
+            }, "display");
+            let b, _ = 0;
+            const x = {
+              type: "ordgroup",
+              mode: t.mode,
+              body: []
+            };
+            if (e[0] && e[0].type === "ordgroup") {
+              let B = "";
+              for (let I = 0; I < e[0].body.length; I++) {
+                const q = pe(e[0].body[I], "textord");
+                B += q.text;
+              }
+              b = Number(B), _ = b * 2;
+            }
+            const F = !_;
+            m.body.forEach(function(B) {
+              for (let I = 1; I < B.length; I += 2) {
+                const q = pe(B[I], "styling");
+                pe(q.body[0], "ordgroup").body.unshift(x);
+              }
+              if (F)
+                _ < B.length && (_ = B.length);
+              else {
+                const I = B.length / 2;
+                if (b < I)
+                  throw new u("Too many math in a row: " + ("expected " + b + ", but got " + I), B[0]);
+              }
+            });
+            for (let B = 0; B < _; ++B) {
+              let I = "r", q = 0;
+              B % 2 === 1 ? I = "l" : B > 0 && F && (q = 1), n[B] = {
+                type: "align",
+                align: I,
+                pregap: q,
+                postgap: 0
+              };
+            }
+            return m.colSeparationType = F ? "align" : "alignat", m;
+          };
+          Qt({
+            type: "array",
+            names: ["array", "darray"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              const c = (Yn(e[0]) ? [e[0]] : pe(e[0], "ordgroup").body).map(function(b) {
+                const x = qr(b).text;
+                if ("lcr".indexOf(x) !== -1)
+                  return {
+                    type: "align",
+                    align: x
+                  };
+                if (x === "|")
+                  return {
+                    type: "separator",
+                    separator: "|"
+                  };
+                if (x === ":")
+                  return {
+                    type: "separator",
+                    separator: ":"
+                  };
+                throw new u("Unknown column alignment: " + x, b);
+              }), m = {
+                cols: c,
+                hskipBeforeAndAfter: !0,
+                // \@preamble in lttab.dtx
+                maxNumCols: c.length
+              };
+              return A0(t.parser, m, Jr(t.envName));
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix", "matrix*", "pmatrix*", "bmatrix*", "Bmatrix*", "vmatrix*", "Vmatrix*"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              const e = {
+                matrix: null,
+                pmatrix: ["(", ")"],
+                bmatrix: ["[", "]"],
+                Bmatrix: ["\\{", "\\}"],
+                vmatrix: ["|", "|"],
+                Vmatrix: ["\\Vert", "\\Vert"]
+              }[t.envName.replace("*", "")];
+              let n = "c";
+              const l = {
+                hskipBeforeAndAfter: !1,
+                cols: [{
+                  type: "align",
+                  align: n
+                }]
+              };
+              if (t.envName.charAt(t.envName.length - 1) === "*") {
+                const b = t.parser;
+                if (b.consumeSpaces(), b.fetch().text === "[") {
+                  if (b.consume(), b.consumeSpaces(), n = b.fetch().text, "lcr".indexOf(n) === -1)
+                    throw new u("Expected l or c or r", b.nextToken);
+                  b.consume(), b.consumeSpaces(), b.expect("]"), b.consume(), l.cols = [{
+                    type: "align",
+                    align: n
+                  }];
+                }
+              }
+              const c = A0(t.parser, l, Jr(t.envName)), m = Math.max(0, ...c.body.map((b) => b.length));
+              return c.cols = new Array(m).fill({
+                type: "align",
+                align: n
+              }), e ? {
+                type: "leftright",
+                mode: t.mode,
+                body: [c],
+                left: e[0],
+                right: e[1],
+                rightColor: void 0
+                // \right uninfluenced by \color in array
+              } : c;
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["smallmatrix"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              const e = {
+                arraystretch: 0.5
+              }, n = A0(t.parser, e, "script");
+              return n.colSeparationType = "small", n;
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["subarray"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              const c = (Yn(e[0]) ? [e[0]] : pe(e[0], "ordgroup").body).map(function(b) {
+                const x = qr(b).text;
+                if ("lc".indexOf(x) !== -1)
+                  return {
+                    type: "align",
+                    align: x
+                  };
+                throw new u("Unknown column alignment: " + x, b);
+              });
+              if (c.length > 1)
+                throw new u("{subarray} can contain only one column");
+              let m = {
+                cols: c,
+                hskipBeforeAndAfter: !1,
+                arraystretch: 0.5
+              };
+              if (m = A0(t.parser, m, "script"), m.body.length > 0 && m.body[0].length > 1)
+                throw new u("{subarray} can contain only one column");
+              return m;
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["cases", "dcases", "rcases", "drcases"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              const e = {
+                arraystretch: 1.2,
+                cols: [{
+                  type: "align",
+                  align: "l",
+                  pregap: 0,
+                  // TODO(kevinb) get the current style.
+                  // For now we use the metrics for TEXT style which is what we were
+                  // doing before.  Before attempting to get the current style we
+                  // should look at TeX's behavior especially for \over and matrices.
+                  postgap: 1
+                  /* 1em quad */
+                }, {
+                  type: "align",
+                  align: "l",
+                  pregap: 0,
+                  postgap: 0
+                }]
+              }, n = A0(t.parser, e, Jr(t.envName));
+              return {
+                type: "leftright",
+                mode: t.mode,
+                body: [n],
+                left: t.envName.indexOf("r") > -1 ? "." : "\\{",
+                right: t.envName.indexOf("r") > -1 ? "\\}" : ".",
+                rightColor: void 0
+              };
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["align", "align*", "aligned", "split"],
+            props: {
+              numArgs: 0
+            },
+            handler: Mi,
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["gathered", "gather", "gather*"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              R.contains(["gather", "gather*"], t.envName) && $n(t);
+              const e = {
+                cols: [{
+                  type: "align",
+                  align: "c"
+                }],
+                addJot: !0,
+                colSeparationType: "gather",
+                autoTag: Qr(t.envName),
+                emptySingleRow: !0,
+                leqno: t.parser.settings.leqno
+              };
+              return A0(t.parser, e, "display");
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["alignat", "alignat*", "alignedat"],
+            props: {
+              numArgs: 1
+            },
+            handler: Mi,
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["equation", "equation*"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              $n(t);
+              const e = {
+                autoTag: Qr(t.envName),
+                emptySingleRow: !0,
+                singleRow: !0,
+                maxNumCols: 1,
+                leqno: t.parser.settings.leqno
+              };
+              return A0(t.parser, e, "display");
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), Qt({
+            type: "array",
+            names: ["CD"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              return $n(t), Du(t.parser);
+            },
+            htmlBuilder: Jt,
+            mathmlBuilder: $t
+          }), k("\\nonumber", "\\gdef\\@eqnsw{0}"), k("\\notag", "\\nonumber"), ne({
+            type: "text",
+            // Doesn't matter what this is.
+            names: ["\\hline", "\\hdashline"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              allowedInMath: !0
+            },
+            handler(t, e) {
+              throw new u(t.funcName + " valid only within array environment");
+            }
+          });
+          var zi = Ei;
+          ne({
+            type: "environment",
+            names: ["\\begin", "\\end"],
+            props: {
+              numArgs: 1,
+              argTypes: ["text"]
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              if (c.type !== "ordgroup")
+                throw new u("Invalid environment name", c);
+              let m = "";
+              for (let b = 0; b < c.body.length; ++b)
+                m += pe(c.body[b], "textord").text;
+              if (l === "\\begin") {
+                if (!zi.hasOwnProperty(m))
+                  throw new u("No such environment: " + m, c);
+                const b = zi[m], {
+                  args: _,
+                  optArgs: x
+                } = n.parseArguments("\\begin{" + m + "}", b), F = {
+                  mode: n.mode,
+                  envName: m,
+                  parser: n
+                }, B = b.handler(F, _, x);
+                n.expect("\\end", !1);
+                const I = n.nextToken, q = pe(n.parseFunction(), "environment");
+                if (q.name !== m)
+                  throw new u("Mismatch: \\begin{" + m + "} matched by \\end{" + q.name + "}", I);
+                return B;
+              }
+              return {
+                type: "environment",
+                mode: n.mode,
+                name: m,
+                nameGroup: c
+              };
+            }
+          });
+          const Bi = (t, e) => {
+            const n = t.font, l = e.withFont(n);
+            return ve(t.body, l);
+          }, Ni = (t, e) => {
+            const n = t.font, l = e.withFont(n);
+            return Ie(t.body, l);
+          }, Ri = {
+            "\\Bbb": "\\mathbb",
+            "\\bold": "\\mathbf",
+            "\\frak": "\\mathfrak",
+            "\\bm": "\\boldsymbol"
+          };
+          ne({
+            type: "font",
+            names: [
+              // styles, except \boldsymbol defined below
+              "\\mathrm",
+              "\\mathit",
+              "\\mathbf",
+              "\\mathnormal",
+              // families
+              "\\mathbb",
+              "\\mathcal",
+              "\\mathfrak",
+              "\\mathscr",
+              "\\mathsf",
+              "\\mathtt",
+              // aliases, except \bm defined below
+              "\\Bbb",
+              "\\bold",
+              "\\frak"
+            ],
+            props: {
+              numArgs: 1,
+              allowedInArgument: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = jn(e[0]);
+              let m = l;
+              return m in Ri && (m = Ri[m]), {
+                type: "font",
+                mode: n.mode,
+                font: m.slice(1),
+                body: c
+              };
+            },
+            htmlBuilder: Bi,
+            mathmlBuilder: Ni
+          }), ne({
+            type: "mclass",
+            names: ["\\boldsymbol", "\\bm"],
+            props: {
+              numArgs: 1
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[0], c = R.isCharacterBox(l);
+              return {
+                type: "mclass",
+                mode: n.mode,
+                mclass: Kn(l),
+                body: [{
+                  type: "font",
+                  mode: n.mode,
+                  font: "boldsymbol",
+                  body: l
+                }],
+                isCharacterBox: c
+              };
+            }
+          }), ne({
+            type: "font",
+            names: ["\\rm", "\\sf", "\\tt", "\\bf", "\\it", "\\cal"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l,
+                breakOnTokenText: c
+              } = t;
+              const {
+                mode: m
+              } = n, b = n.parseExpression(!0, c), _ = "math" + l.slice(1);
+              return {
+                type: "font",
+                mode: m,
+                font: _,
+                body: {
+                  type: "ordgroup",
+                  mode: n.mode,
+                  body: b
+                }
+              };
+            },
+            htmlBuilder: Bi,
+            mathmlBuilder: Ni
+          });
+          const Ii = (t, e) => {
+            let n = e;
+            return t === "display" ? n = n.id >= ae.SCRIPT.id ? n.text() : ae.DISPLAY : t === "text" && n.size === ae.DISPLAY.size ? n = ae.TEXT : t === "script" ? n = ae.SCRIPT : t === "scriptscript" && (n = ae.SCRIPTSCRIPT), n;
+          }, $r = (t, e) => {
+            const n = Ii(t.size, e.style), l = n.fracNum(), c = n.fracDen();
+            let m;
+            m = e.havingStyle(l);
+            const b = ve(t.numer, m, e);
+            if (t.continued) {
+              const De = 8.5 / e.fontMetrics().ptPerEm, Fe = 3.5 / e.fontMetrics().ptPerEm;
+              b.height = b.height < De ? De : b.height, b.depth = b.depth < Fe ? Fe : b.depth;
+            }
+            m = e.havingStyle(c);
+            const _ = ve(t.denom, m, e);
+            let x, F, B;
+            t.hasBarLine ? (t.barSize ? (F = Ne(t.barSize, e), x = O.makeLineSpan("frac-line", e, F)) : x = O.makeLineSpan("frac-line", e), F = x.height, B = x.height) : (x = null, F = 0, B = e.fontMetrics().defaultRuleThickness);
+            let I, q, W;
+            n.size === ae.DISPLAY.size || t.size === "display" ? (I = e.fontMetrics().num1, F > 0 ? q = 3 * B : q = 7 * B, W = e.fontMetrics().denom1) : (F > 0 ? (I = e.fontMetrics().num2, q = B) : (I = e.fontMetrics().num3, q = 3 * B), W = e.fontMetrics().denom2);
+            let se;
+            if (x) {
+              const De = e.fontMetrics().axisHeight;
+              I - b.depth - (De + 0.5 * F) < q && (I += q - (I - b.depth - (De + 0.5 * F))), De - 0.5 * F - (_.height - W) < q && (W += q - (De - 0.5 * F - (_.height - W)));
+              const Fe = -(De - 0.5 * F);
+              se = O.makeVList({
+                positionType: "individualShift",
+                children: [{
+                  type: "elem",
+                  elem: _,
+                  shift: W
+                }, {
+                  type: "elem",
+                  elem: x,
+                  shift: Fe
+                }, {
+                  type: "elem",
+                  elem: b,
+                  shift: -I
+                }]
+              }, e);
+            } else {
+              const De = I - b.depth - (_.height - W);
+              De < q && (I += 0.5 * (q - De), W += 0.5 * (q - De)), se = O.makeVList({
+                positionType: "individualShift",
+                children: [{
+                  type: "elem",
+                  elem: _,
+                  shift: W
+                }, {
+                  type: "elem",
+                  elem: b,
+                  shift: -I
+                }]
+              }, e);
+            }
+            m = e.havingStyle(n), se.height *= m.sizeMultiplier / e.sizeMultiplier, se.depth *= m.sizeMultiplier / e.sizeMultiplier;
+            let ue;
+            n.size === ae.DISPLAY.size ? ue = e.fontMetrics().delim1 : n.size === ae.SCRIPTSCRIPT.size ? ue = e.havingStyle(ae.SCRIPT).fontMetrics().delim2 : ue = e.fontMetrics().delim2;
+            let xe, we;
+            return t.leftDelim == null ? xe = yn(e, ["mopen"]) : xe = d0.customSizedDelim(t.leftDelim, ue, !0, e.havingStyle(n), t.mode, ["mopen"]), t.continued ? we = O.makeSpan([]) : t.rightDelim == null ? we = yn(e, ["mclose"]) : we = d0.customSizedDelim(t.rightDelim, ue, !0, e.havingStyle(n), t.mode, ["mclose"]), O.makeSpan(["mord"].concat(m.sizingClasses(e)), [xe, O.makeSpan(["mfrac"], [se]), we], e);
+          }, es = (t, e) => {
+            let n = new Y.MathNode("mfrac", [Ie(t.numer, e), Ie(t.denom, e)]);
+            if (!t.hasBarLine)
+              n.setAttribute("linethickness", "0px");
+            else if (t.barSize) {
+              const c = Ne(t.barSize, e);
+              n.setAttribute("linethickness", $(c));
+            }
+            const l = Ii(t.size, e.style);
+            if (l.size !== e.style.size) {
+              n = new Y.MathNode("mstyle", [n]);
+              const c = l.size === ae.DISPLAY.size ? "true" : "false";
+              n.setAttribute("displaystyle", c), n.setAttribute("scriptlevel", "0");
+            }
+            if (t.leftDelim != null || t.rightDelim != null) {
+              const c = [];
+              if (t.leftDelim != null) {
+                const m = new Y.MathNode("mo", [new Y.TextNode(t.leftDelim.replace("\\", ""))]);
+                m.setAttribute("fence", "true"), c.push(m);
+              }
+              if (c.push(n), t.rightDelim != null) {
+                const m = new Y.MathNode("mo", [new Y.TextNode(t.rightDelim.replace("\\", ""))]);
+                m.setAttribute("fence", "true"), c.push(m);
+              }
+              return Lr(c);
+            }
+            return n;
+          };
+          ne({
+            type: "genfrac",
+            names: [
+              "\\dfrac",
+              "\\frac",
+              "\\tfrac",
+              "\\dbinom",
+              "\\binom",
+              "\\tbinom",
+              "\\\\atopfrac",
+              // can’t be entered directly
+              "\\\\bracefrac",
+              "\\\\brackfrac"
+              // ditto
+            ],
+            props: {
+              numArgs: 2,
+              allowedInArgument: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0], m = e[1];
+              let b, _ = null, x = null, F = "auto";
+              switch (l) {
+                case "\\dfrac":
+                case "\\frac":
+                case "\\tfrac":
+                  b = !0;
+                  break;
+                case "\\\\atopfrac":
+                  b = !1;
+                  break;
+                case "\\dbinom":
+                case "\\binom":
+                case "\\tbinom":
+                  b = !1, _ = "(", x = ")";
+                  break;
+                case "\\\\bracefrac":
+                  b = !1, _ = "\\{", x = "\\}";
+                  break;
+                case "\\\\brackfrac":
+                  b = !1, _ = "[", x = "]";
+                  break;
+                default:
+                  throw new Error("Unrecognized genfrac command");
+              }
+              switch (l) {
+                case "\\dfrac":
+                case "\\dbinom":
+                  F = "display";
+                  break;
+                case "\\tfrac":
+                case "\\tbinom":
+                  F = "text";
+                  break;
+              }
+              return {
+                type: "genfrac",
+                mode: n.mode,
+                continued: !1,
+                numer: c,
+                denom: m,
+                hasBarLine: b,
+                leftDelim: _,
+                rightDelim: x,
+                size: F,
+                barSize: null
+              };
+            },
+            htmlBuilder: $r,
+            mathmlBuilder: es
+          }), ne({
+            type: "genfrac",
+            names: ["\\cfrac"],
+            props: {
+              numArgs: 2
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0], m = e[1];
+              return {
+                type: "genfrac",
+                mode: n.mode,
+                continued: !0,
+                numer: c,
+                denom: m,
+                hasBarLine: !0,
+                leftDelim: null,
+                rightDelim: null,
+                size: "display",
+                barSize: null
+              };
+            }
+          }), ne({
+            type: "infix",
+            names: ["\\over", "\\choose", "\\atop", "\\brace", "\\brack"],
+            props: {
+              numArgs: 0,
+              infix: !0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n,
+                token: l
+              } = t, c;
+              switch (n) {
+                case "\\over":
+                  c = "\\frac";
+                  break;
+                case "\\choose":
+                  c = "\\binom";
+                  break;
+                case "\\atop":
+                  c = "\\\\atopfrac";
+                  break;
+                case "\\brace":
+                  c = "\\\\bracefrac";
+                  break;
+                case "\\brack":
+                  c = "\\\\brackfrac";
+                  break;
+                default:
+                  throw new Error("Unrecognized infix genfrac command");
+              }
+              return {
+                type: "infix",
+                mode: e.mode,
+                replaceWith: c,
+                token: l
+              };
+            }
+          });
+          const Li = ["display", "text", "script", "scriptscript"], Oi = function(t) {
+            let e = null;
+            return t.length > 0 && (e = t, e = e === "." ? null : e), e;
+          };
+          ne({
+            type: "genfrac",
+            names: ["\\genfrac"],
+            props: {
+              numArgs: 6,
+              allowedInArgument: !0,
+              argTypes: ["math", "math", "size", "text", "math", "math"]
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              const l = e[4], c = e[5], m = jn(e[0]), b = m.type === "atom" && m.family === "open" ? Oi(m.text) : null, _ = jn(e[1]), x = _.type === "atom" && _.family === "close" ? Oi(_.text) : null, F = pe(e[2], "size");
+              let B, I = null;
+              F.isBlank ? B = !0 : (I = F.value, B = I.number > 0);
+              let q = "auto", W = e[3];
+              if (W.type === "ordgroup") {
+                if (W.body.length > 0) {
+                  const se = pe(W.body[0], "textord");
+                  q = Li[Number(se.text)];
+                }
+              } else
+                W = pe(W, "textord"), q = Li[Number(W.text)];
+              return {
+                type: "genfrac",
+                mode: n.mode,
+                numer: l,
+                denom: c,
+                continued: !1,
+                hasBarLine: B,
+                barSize: I,
+                leftDelim: b,
+                rightDelim: x,
+                size: q
+              };
+            },
+            htmlBuilder: $r,
+            mathmlBuilder: es
+          }), ne({
+            type: "infix",
+            names: ["\\above"],
+            props: {
+              numArgs: 1,
+              argTypes: ["size"],
+              infix: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l,
+                token: c
+              } = t;
+              return {
+                type: "infix",
+                mode: n.mode,
+                replaceWith: "\\\\abovefrac",
+                size: pe(e[0], "size").value,
+                token: c
+              };
+            }
+          }), ne({
+            type: "genfrac",
+            names: ["\\\\abovefrac"],
+            props: {
+              numArgs: 3,
+              argTypes: ["math", "size", "math"]
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0], m = ee(pe(e[1], "infix").size), b = e[2], _ = m.number > 0;
+              return {
+                type: "genfrac",
+                mode: n.mode,
+                numer: c,
+                denom: b,
+                continued: !1,
+                hasBarLine: _,
+                barSize: m,
+                leftDelim: null,
+                rightDelim: null,
+                size: "auto"
+              };
+            },
+            htmlBuilder: $r,
+            mathmlBuilder: es
+          });
+          const qi = (t, e) => {
+            const n = e.style;
+            let l, c;
+            t.type === "supsub" ? (l = t.sup ? ve(t.sup, e.havingStyle(n.sup()), e) : ve(t.sub, e.havingStyle(n.sub()), e), c = pe(t.base, "horizBrace")) : c = pe(t, "horizBrace");
+            const m = ve(c.base, e.havingBaseStyle(ae.DISPLAY)), b = f0.svgSpan(c, e);
+            let _;
+            if (c.isOver ? (_ = O.makeVList({
+              positionType: "firstBaseline",
+              children: [{
+                type: "elem",
+                elem: m
+              }, {
+                type: "kern",
+                size: 0.1
+              }, {
+                type: "elem",
+                elem: b
+              }]
+            }, e), _.children[0].children[0].children[1].classes.push("svg-align")) : (_ = O.makeVList({
+              positionType: "bottom",
+              positionData: m.depth + 0.1 + b.height,
+              children: [{
+                type: "elem",
+                elem: b
+              }, {
+                type: "kern",
+                size: 0.1
+              }, {
+                type: "elem",
+                elem: m
+              }]
+            }, e), _.children[0].children[0].children[0].classes.push("svg-align")), l) {
+              const x = O.makeSpan(["mord", c.isOver ? "mover" : "munder"], [_], e);
+              c.isOver ? _ = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: x
+                }, {
+                  type: "kern",
+                  size: 0.2
+                }, {
+                  type: "elem",
+                  elem: l
+                }]
+              }, e) : _ = O.makeVList({
+                positionType: "bottom",
+                positionData: x.depth + 0.2 + l.height + l.depth,
+                children: [{
+                  type: "elem",
+                  elem: l
+                }, {
+                  type: "kern",
+                  size: 0.2
+                }, {
+                  type: "elem",
+                  elem: x
+                }]
+              }, e);
+            }
+            return O.makeSpan(["mord", c.isOver ? "mover" : "munder"], [_], e);
+          };
+          ne({
+            type: "horizBrace",
+            names: ["\\overbrace", "\\underbrace"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              return {
+                type: "horizBrace",
+                mode: n.mode,
+                label: l,
+                isOver: /^\\over/.test(l),
+                base: e[0]
+              };
+            },
+            htmlBuilder: qi,
+            mathmlBuilder: (t, e) => {
+              const n = f0.mathMLnode(t.label);
+              return new Y.MathNode(t.isOver ? "mover" : "munder", [Ie(t.base, e), n]);
+            }
+          }), ne({
+            type: "href",
+            names: ["\\href"],
+            props: {
+              numArgs: 2,
+              argTypes: ["url", "original"],
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[1], c = pe(e[0], "url").url;
+              return n.settings.isTrusted({
+                command: "\\href",
+                url: c
+              }) ? {
+                type: "href",
+                mode: n.mode,
+                href: c,
+                body: Ze(l)
+              } : n.formatUnsupportedCmd("\\href");
+            },
+            htmlBuilder: (t, e) => {
+              const n = Je(t.body, e, !1);
+              return O.makeAnchor(t.href, [], n, e);
+            },
+            mathmlBuilder: (t, e) => {
+              let n = v0(t.body, e);
+              return n instanceof Ft || (n = new Ft("mrow", [n])), n.setAttribute("href", t.href), n;
+            }
+          }), ne({
+            type: "href",
+            names: ["\\url"],
+            props: {
+              numArgs: 1,
+              argTypes: ["url"],
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = pe(e[0], "url").url;
+              if (!n.settings.isTrusted({
+                command: "\\url",
+                url: l
+              }))
+                return n.formatUnsupportedCmd("\\url");
+              const c = [];
+              for (let b = 0; b < l.length; b++) {
+                let _ = l[b];
+                _ === "~" && (_ = "\\textasciitilde"), c.push({
+                  type: "textord",
+                  mode: "text",
+                  text: _
+                });
+              }
+              const m = {
+                type: "text",
+                mode: n.mode,
+                font: "\\texttt",
+                body: c
+              };
+              return {
+                type: "href",
+                mode: n.mode,
+                href: l,
+                body: Ze(m)
+              };
+            }
+          }), ne({
+            type: "hbox",
+            names: ["\\hbox"],
+            props: {
+              numArgs: 1,
+              argTypes: ["text"],
+              allowedInText: !0,
+              primitive: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "hbox",
+                mode: n.mode,
+                body: Ze(e[0])
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = Je(t.body, e, !1);
+              return O.makeFragment(n);
+            },
+            mathmlBuilder(t, e) {
+              return new Y.MathNode("mrow", dt(t.body, e));
+            }
+          }), ne({
+            type: "html",
+            names: ["\\htmlClass", "\\htmlId", "\\htmlStyle", "\\htmlData"],
+            props: {
+              numArgs: 2,
+              argTypes: ["raw", "original"],
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l,
+                token: c
+              } = t;
+              const m = pe(e[0], "raw").string, b = e[1];
+              n.settings.strict && n.settings.reportNonstrict("htmlExtension", "HTML extension is disabled on strict mode");
+              let _;
+              const x = {};
+              switch (l) {
+                case "\\htmlClass":
+                  x.class = m, _ = {
+                    command: "\\htmlClass",
+                    class: m
+                  };
+                  break;
+                case "\\htmlId":
+                  x.id = m, _ = {
+                    command: "\\htmlId",
+                    id: m
+                  };
+                  break;
+                case "\\htmlStyle":
+                  x.style = m, _ = {
+                    command: "\\htmlStyle",
+                    style: m
+                  };
+                  break;
+                case "\\htmlData": {
+                  const F = m.split(",");
+                  for (let B = 0; B < F.length; B++) {
+                    const I = F[B].split("=");
+                    if (I.length !== 2)
+                      throw new u("Error parsing key-value for \\htmlData");
+                    x["data-" + I[0].trim()] = I[1].trim();
+                  }
+                  _ = {
+                    command: "\\htmlData",
+                    attributes: x
+                  };
+                  break;
+                }
+                default:
+                  throw new Error("Unrecognized html command");
+              }
+              return n.settings.isTrusted(_) ? {
+                type: "html",
+                mode: n.mode,
+                attributes: x,
+                body: Ze(b)
+              } : n.formatUnsupportedCmd(l);
+            },
+            htmlBuilder: (t, e) => {
+              const n = Je(t.body, e, !1), l = ["enclosing"];
+              t.attributes.class && l.push(...t.attributes.class.trim().split(/\s+/));
+              const c = O.makeSpan(l, n, e);
+              for (const m in t.attributes)
+                m !== "class" && t.attributes.hasOwnProperty(m) && c.setAttribute(m, t.attributes[m]);
+              return c;
+            },
+            mathmlBuilder: (t, e) => v0(t.body, e)
+          }), ne({
+            type: "htmlmathml",
+            names: ["\\html@mathml"],
+            props: {
+              numArgs: 2,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "htmlmathml",
+                mode: n.mode,
+                html: Ze(e[0]),
+                mathml: Ze(e[1])
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = Je(t.html, e, !1);
+              return O.makeFragment(n);
+            },
+            mathmlBuilder: (t, e) => v0(t.mathml, e)
+          });
+          const ts = function(t) {
+            if (/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(t))
+              return {
+                number: +t,
+                unit: "bp"
+              };
+            {
+              const e = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t);
+              if (!e)
+                throw new u("Invalid size: '" + t + "' in \\includegraphics");
+              const n = {
+                number: +(e[1] + e[2]),
+                // sign + magnitude, cast to number
+                unit: e[3]
+              };
+              if (!u0(n))
+                throw new u("Invalid unit: '" + n.unit + "' in \\includegraphics.");
+              return n;
+            }
+          };
+          ne({
+            type: "includegraphics",
+            names: ["\\includegraphics"],
+            props: {
+              numArgs: 1,
+              numOptionalArgs: 1,
+              argTypes: ["raw", "url"],
+              allowedInText: !1
+            },
+            handler: (t, e, n) => {
+              let {
+                parser: l
+              } = t, c = {
+                number: 0,
+                unit: "em"
+              }, m = {
+                number: 0.9,
+                unit: "em"
+              }, b = {
+                number: 0,
+                unit: "em"
+              }, _ = "";
+              if (n[0]) {
+                const B = pe(n[0], "raw").string.split(",");
+                for (let I = 0; I < B.length; I++) {
+                  const q = B[I].split("=");
+                  if (q.length === 2) {
+                    const W = q[1].trim();
+                    switch (q[0].trim()) {
+                      case "alt":
+                        _ = W;
+                        break;
+                      case "width":
+                        c = ts(W);
+                        break;
+                      case "height":
+                        m = ts(W);
+                        break;
+                      case "totalheight":
+                        b = ts(W);
+                        break;
+                      default:
+                        throw new u("Invalid key: '" + q[0] + "' in \\includegraphics.");
+                    }
+                  }
+                }
+              }
+              const x = pe(e[0], "url").url;
+              return _ === "" && (_ = x, _ = _.replace(/^.*[\\/]/, ""), _ = _.substring(0, _.lastIndexOf("."))), l.settings.isTrusted({
+                command: "\\includegraphics",
+                url: x
+              }) ? {
+                type: "includegraphics",
+                mode: l.mode,
+                alt: _,
+                width: c,
+                height: m,
+                totalheight: b,
+                src: x
+              } : l.formatUnsupportedCmd("\\includegraphics");
+            },
+            htmlBuilder: (t, e) => {
+              const n = Ne(t.height, e);
+              let l = 0;
+              t.totalheight.number > 0 && (l = Ne(t.totalheight, e) - n);
+              let c = 0;
+              t.width.number > 0 && (c = Ne(t.width, e));
+              const m = {
+                height: $(n + l)
+              };
+              c > 0 && (m.width = $(c)), l > 0 && (m.verticalAlign = $(-l));
+              const b = new Tr(t.src, t.alt, m);
+              return b.height = n, b.depth = l, b;
+            },
+            mathmlBuilder: (t, e) => {
+              const n = new Y.MathNode("mglyph", []);
+              n.setAttribute("alt", t.alt);
+              const l = Ne(t.height, e);
+              let c = 0;
+              if (t.totalheight.number > 0 && (c = Ne(t.totalheight, e) - l, n.setAttribute("valign", $(-c))), n.setAttribute("height", $(l + c)), t.width.number > 0) {
+                const m = Ne(t.width, e);
+                n.setAttribute("width", $(m));
+              }
+              return n.setAttribute("src", t.src), n;
+            }
+          }), ne({
+            type: "kern",
+            names: ["\\kern", "\\mkern", "\\hskip", "\\mskip"],
+            props: {
+              numArgs: 1,
+              argTypes: ["size"],
+              primitive: !0,
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = pe(e[0], "size");
+              if (n.settings.strict) {
+                const m = l[1] === "m", b = c.value.unit === "mu";
+                m ? (b || n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + l + " supports only mu units, " + ("not " + c.value.unit + " units")), n.mode !== "math" && n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + l + " works only in math mode")) : b && n.settings.reportNonstrict("mathVsTextUnits", "LaTeX's " + l + " doesn't support mu units");
+              }
+              return {
+                type: "kern",
+                mode: n.mode,
+                dimension: c.value
+              };
+            },
+            htmlBuilder(t, e) {
+              return O.makeGlue(t.dimension, e);
+            },
+            mathmlBuilder(t, e) {
+              const n = Ne(t.dimension, e);
+              return new Y.SpaceNode(n);
+            }
+          }), ne({
+            type: "lap",
+            names: ["\\mathllap", "\\mathrlap", "\\mathclap"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "lap",
+                mode: n.mode,
+                alignment: l.slice(5),
+                body: c
+              };
+            },
+            htmlBuilder: (t, e) => {
+              let n;
+              t.alignment === "clap" ? (n = O.makeSpan([], [ve(t.body, e)]), n = O.makeSpan(["inner"], [n], e)) : n = O.makeSpan(["inner"], [ve(t.body, e)]);
+              const l = O.makeSpan(["fix"], []);
+              let c = O.makeSpan([t.alignment], [n, l], e);
+              const m = O.makeSpan(["strut"]);
+              return m.style.height = $(c.height + c.depth), c.depth && (m.style.verticalAlign = $(-c.depth)), c.children.unshift(m), c = O.makeSpan(["thinbox"], [c], e), O.makeSpan(["mord", "vbox"], [c], e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = new Y.MathNode("mpadded", [Ie(t.body, e)]);
+              if (t.alignment !== "rlap") {
+                const l = t.alignment === "llap" ? "-1" : "-0.5";
+                n.setAttribute("lspace", l + "width");
+              }
+              return n.setAttribute("width", "0px"), n;
+            }
+          }), ne({
+            type: "styling",
+            names: ["\\(", "$"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              allowedInMath: !1
+            },
+            handler(t, e) {
+              let {
+                funcName: n,
+                parser: l
+              } = t;
+              const c = l.mode;
+              l.switchMode("math");
+              const m = n === "\\(" ? "\\)" : "$", b = l.parseExpression(!1, m);
+              return l.expect(m), l.switchMode(c), {
+                type: "styling",
+                mode: l.mode,
+                style: "text",
+                body: b
+              };
+            }
+          }), ne({
+            type: "text",
+            // Doesn't matter what this is.
+            names: ["\\)", "\\]"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              allowedInMath: !1
+            },
+            handler(t, e) {
+              throw new u("Mismatched " + t.funcName);
+            }
+          });
+          const Pi = (t, e) => {
+            switch (e.style.size) {
+              case ae.DISPLAY.size:
+                return t.display;
+              case ae.TEXT.size:
+                return t.text;
+              case ae.SCRIPT.size:
+                return t.script;
+              case ae.SCRIPTSCRIPT.size:
+                return t.scriptscript;
+              default:
+                return t.text;
+            }
+          };
+          ne({
+            type: "mathchoice",
+            names: ["\\mathchoice"],
+            props: {
+              numArgs: 4,
+              primitive: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "mathchoice",
+                mode: n.mode,
+                display: Ze(e[0]),
+                text: Ze(e[1]),
+                script: Ze(e[2]),
+                scriptscript: Ze(e[3])
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = Pi(t, e), l = Je(n, e, !1);
+              return O.makeFragment(l);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = Pi(t, e);
+              return v0(n, e);
+            }
+          });
+          const Hi = (t, e, n, l, c, m, b) => {
+            t = O.makeSpan([], [t]);
+            const _ = n && R.isCharacterBox(n);
+            let x, F;
+            if (e) {
+              const q = ve(e, l.havingStyle(c.sup()), l);
+              F = {
+                elem: q,
+                kern: Math.max(l.fontMetrics().bigOpSpacing1, l.fontMetrics().bigOpSpacing3 - q.depth)
+              };
+            }
+            if (n) {
+              const q = ve(n, l.havingStyle(c.sub()), l);
+              x = {
+                elem: q,
+                kern: Math.max(l.fontMetrics().bigOpSpacing2, l.fontMetrics().bigOpSpacing4 - q.height)
+              };
+            }
+            let B;
+            if (F && x) {
+              const q = l.fontMetrics().bigOpSpacing5 + x.elem.height + x.elem.depth + x.kern + t.depth + b;
+              B = O.makeVList({
+                positionType: "bottom",
+                positionData: q,
+                children: [{
+                  type: "kern",
+                  size: l.fontMetrics().bigOpSpacing5
+                }, {
+                  type: "elem",
+                  elem: x.elem,
+                  marginLeft: $(-m)
+                }, {
+                  type: "kern",
+                  size: x.kern
+                }, {
+                  type: "elem",
+                  elem: t
+                }, {
+                  type: "kern",
+                  size: F.kern
+                }, {
+                  type: "elem",
+                  elem: F.elem,
+                  marginLeft: $(m)
+                }, {
+                  type: "kern",
+                  size: l.fontMetrics().bigOpSpacing5
+                }]
+              }, l);
+            } else if (x) {
+              const q = t.height - b;
+              B = O.makeVList({
+                positionType: "top",
+                positionData: q,
+                children: [{
+                  type: "kern",
+                  size: l.fontMetrics().bigOpSpacing5
+                }, {
+                  type: "elem",
+                  elem: x.elem,
+                  marginLeft: $(-m)
+                }, {
+                  type: "kern",
+                  size: x.kern
+                }, {
+                  type: "elem",
+                  elem: t
+                }]
+              }, l);
+            } else if (F) {
+              const q = t.depth + b;
+              B = O.makeVList({
+                positionType: "bottom",
+                positionData: q,
+                children: [{
+                  type: "elem",
+                  elem: t
+                }, {
+                  type: "kern",
+                  size: F.kern
+                }, {
+                  type: "elem",
+                  elem: F.elem,
+                  marginLeft: $(m)
+                }, {
+                  type: "kern",
+                  size: l.fontMetrics().bigOpSpacing5
+                }]
+              }, l);
+            } else
+              return t;
+            const I = [B];
+            if (x && m !== 0 && !_) {
+              const q = O.makeSpan(["mspace"], [], l);
+              q.style.marginRight = $(m), I.unshift(q);
+            }
+            return O.makeSpan(["mop", "op-limits"], I, l);
+          }, Ui = ["\\smallint"], nn = (t, e) => {
+            let n, l, c = !1, m;
+            t.type === "supsub" ? (n = t.sup, l = t.sub, m = pe(t.base, "op"), c = !0) : m = pe(t, "op");
+            const b = e.style;
+            let _ = !1;
+            b.size === ae.DISPLAY.size && m.symbol && !R.contains(Ui, m.name) && (_ = !0);
+            let x;
+            if (m.symbol) {
+              const I = _ ? "Size2-Regular" : "Size1-Regular";
+              let q = "";
+              if ((m.name === "\\oiint" || m.name === "\\oiiint") && (q = m.name.slice(1), m.name = q === "oiint" ? "\\iint" : "\\iiint"), x = O.makeSymbol(m.name, I, "math", e, ["mop", "op-symbol", _ ? "large-op" : "small-op"]), q.length > 0) {
+                const W = x.italic, se = O.staticSvg(q + "Size" + (_ ? "2" : "1"), e);
+                x = O.makeVList({
+                  positionType: "individualShift",
+                  children: [{
+                    type: "elem",
+                    elem: x,
+                    shift: 0
+                  }, {
+                    type: "elem",
+                    elem: se,
+                    shift: _ ? 0.08 : 0
+                  }]
+                }, e), m.name = "\\" + q, x.classes.unshift("mop"), x.italic = W;
+              }
+            } else if (m.body) {
+              const I = Je(m.body, e, !0);
+              I.length === 1 && I[0] instanceof st ? (x = I[0], x.classes[0] = "mop") : x = O.makeSpan(["mop"], I, e);
+            } else {
+              const I = [];
+              for (let q = 1; q < m.name.length; q++)
+                I.push(O.mathsym(m.name[q], m.mode, e));
+              x = O.makeSpan(["mop"], I, e);
+            }
+            let F = 0, B = 0;
+            return (x instanceof st || m.name === "\\oiint" || m.name === "\\oiiint") && !m.suppressBaseShift && (F = (x.height - x.depth) / 2 - e.fontMetrics().axisHeight, B = x.italic), c ? Hi(x, n, l, e, b, B, F) : (F && (x.style.position = "relative", x.style.top = $(F)), x);
+          }, Dn = (t, e) => {
+            let n;
+            if (t.symbol)
+              n = new Ft("mo", [Et(t.name, t.mode)]), R.contains(Ui, t.name) && n.setAttribute("largeop", "false");
+            else if (t.body)
+              n = new Ft("mo", dt(t.body, e));
+            else {
+              n = new Ft("mi", [new _n(t.name.slice(1))]);
+              const l = new Ft("mo", [Et("⁡", "text")]);
+              t.parentIsSupSub ? n = new Ft("mrow", [n, l]) : n = ii([n, l]);
+            }
+            return n;
+          }, Lu = {
+            "∏": "\\prod",
+            "∐": "\\coprod",
+            "∑": "\\sum",
+            "⋀": "\\bigwedge",
+            "⋁": "\\bigvee",
+            "⋂": "\\bigcap",
+            "⋃": "\\bigcup",
+            "⨀": "\\bigodot",
+            "⨁": "\\bigoplus",
+            "⨂": "\\bigotimes",
+            "⨄": "\\biguplus",
+            "⨆": "\\bigsqcup"
+          };
+          ne({
+            type: "op",
+            names: ["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint", "∏", "∐", "∑", "⋀", "⋁", "⋂", "⋃", "⨀", "⨁", "⨂", "⨄", "⨆"],
+            props: {
+              numArgs: 0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t, c = l;
+              return c.length === 1 && (c = Lu[c]), {
+                type: "op",
+                mode: n.mode,
+                limits: !0,
+                parentIsSupSub: !1,
+                symbol: !0,
+                name: c
+              };
+            },
+            htmlBuilder: nn,
+            mathmlBuilder: Dn
+          }), ne({
+            type: "op",
+            names: ["\\mathop"],
+            props: {
+              numArgs: 1,
+              primitive: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[0];
+              return {
+                type: "op",
+                mode: n.mode,
+                limits: !1,
+                parentIsSupSub: !1,
+                symbol: !1,
+                body: Ze(l)
+              };
+            },
+            htmlBuilder: nn,
+            mathmlBuilder: Dn
+          });
+          const Ou = {
+            "∫": "\\int",
+            "∬": "\\iint",
+            "∭": "\\iiint",
+            "∮": "\\oint",
+            "∯": "\\oiint",
+            "∰": "\\oiiint"
+          };
+          ne({
+            type: "op",
+            names: ["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t;
+              return {
+                type: "op",
+                mode: e.mode,
+                limits: !1,
+                parentIsSupSub: !1,
+                symbol: !1,
+                name: n
+              };
+            },
+            htmlBuilder: nn,
+            mathmlBuilder: Dn
+          }), ne({
+            type: "op",
+            names: ["\\det", "\\gcd", "\\inf", "\\lim", "\\max", "\\min", "\\Pr", "\\sup"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t;
+              return {
+                type: "op",
+                mode: e.mode,
+                limits: !0,
+                parentIsSupSub: !1,
+                symbol: !1,
+                name: n
+              };
+            },
+            htmlBuilder: nn,
+            mathmlBuilder: Dn
+          }), ne({
+            type: "op",
+            names: ["\\int", "\\iint", "\\iiint", "\\oint", "\\oiint", "\\oiiint", "∫", "∬", "∭", "∮", "∯", "∰"],
+            props: {
+              numArgs: 0
+            },
+            handler(t) {
+              let {
+                parser: e,
+                funcName: n
+              } = t, l = n;
+              return l.length === 1 && (l = Ou[l]), {
+                type: "op",
+                mode: e.mode,
+                limits: !1,
+                parentIsSupSub: !1,
+                symbol: !0,
+                name: l
+              };
+            },
+            htmlBuilder: nn,
+            mathmlBuilder: Dn
+          });
+          const Gi = (t, e) => {
+            let n, l, c = !1, m;
+            t.type === "supsub" ? (n = t.sup, l = t.sub, m = pe(t.base, "operatorname"), c = !0) : m = pe(t, "operatorname");
+            let b;
+            if (m.body.length > 0) {
+              const _ = m.body.map((F) => {
+                const B = F.text;
+                return typeof B == "string" ? {
+                  type: "textord",
+                  mode: F.mode,
+                  text: B
+                } : F;
+              }), x = Je(_, e.withFont("mathrm"), !0);
+              for (let F = 0; F < x.length; F++) {
+                const B = x[F];
+                B instanceof st && (B.text = B.text.replace(/\u2212/, "-").replace(/\u2217/, "*"));
+              }
+              b = O.makeSpan(["mop"], x, e);
+            } else
+              b = O.makeSpan(["mop"], [], e);
+            return c ? Hi(b, n, l, e, e.style, 0, 0) : b;
+          };
+          ne({
+            type: "operatorname",
+            names: ["\\operatorname@", "\\operatornamewithlimits"],
+            props: {
+              numArgs: 1
+            },
+            handler: (t, e) => {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "operatorname",
+                mode: n.mode,
+                body: Ze(c),
+                alwaysHandleSupSub: l === "\\operatornamewithlimits",
+                limits: !1,
+                parentIsSupSub: !1
+              };
+            },
+            htmlBuilder: Gi,
+            mathmlBuilder: (t, e) => {
+              let n = dt(t.body, e.withFont("mathrm")), l = !0;
+              for (let b = 0; b < n.length; b++) {
+                const _ = n[b];
+                if (!(_ instanceof Y.SpaceNode))
+                  if (_ instanceof Y.MathNode)
+                    switch (_.type) {
+                      case "mi":
+                      case "mn":
+                      case "ms":
+                      case "mspace":
+                      case "mtext":
+                        break;
+                      case "mo": {
+                        const x = _.children[0];
+                        _.children.length === 1 && x instanceof Y.TextNode ? x.text = x.text.replace(/\u2212/, "-").replace(/\u2217/, "*") : l = !1;
+                        break;
+                      }
+                      default:
+                        l = !1;
+                    }
+                  else
+                    l = !1;
+              }
+              if (l) {
+                const b = n.map((_) => _.toText()).join("");
+                n = [new Y.TextNode(b)];
+              }
+              const c = new Y.MathNode("mi", n);
+              c.setAttribute("mathvariant", "normal");
+              const m = new Y.MathNode("mo", [Et("⁡", "text")]);
+              return t.parentIsSupSub ? new Y.MathNode("mrow", [c, m]) : Y.newDocumentFragment([c, m]);
+            }
+          }), k("\\operatorname", "\\@ifstar\\operatornamewithlimits\\operatorname@"), P0({
+            type: "ordgroup",
+            htmlBuilder(t, e) {
+              return t.semisimple ? O.makeFragment(Je(t.body, e, !1)) : O.makeSpan(["mord"], Je(t.body, e, !0), e);
+            },
+            mathmlBuilder(t, e) {
+              return v0(t.body, e, !0);
+            }
+          }), ne({
+            type: "overline",
+            names: ["\\overline"],
+            props: {
+              numArgs: 1
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              const l = e[0];
+              return {
+                type: "overline",
+                mode: n.mode,
+                body: l
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = ve(t.body, e.havingCrampedStyle()), l = O.makeLineSpan("overline-line", e), c = e.fontMetrics().defaultRuleThickness, m = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: n
+                }, {
+                  type: "kern",
+                  size: 3 * c
+                }, {
+                  type: "elem",
+                  elem: l
+                }, {
+                  type: "kern",
+                  size: c
+                }]
+              }, e);
+              return O.makeSpan(["mord", "overline"], [m], e);
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mo", [new Y.TextNode("‾")]);
+              n.setAttribute("stretchy", "true");
+              const l = new Y.MathNode("mover", [Ie(t.body, e), n]);
+              return l.setAttribute("accent", "true"), l;
+            }
+          }), ne({
+            type: "phantom",
+            names: ["\\phantom"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[0];
+              return {
+                type: "phantom",
+                mode: n.mode,
+                body: Ze(l)
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = Je(t.body, e.withPhantom(), !1);
+              return O.makeFragment(n);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = dt(t.body, e);
+              return new Y.MathNode("mphantom", n);
+            }
+          }), ne({
+            type: "hphantom",
+            names: ["\\hphantom"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[0];
+              return {
+                type: "hphantom",
+                mode: n.mode,
+                body: l
+              };
+            },
+            htmlBuilder: (t, e) => {
+              let n = O.makeSpan([], [ve(t.body, e.withPhantom())]);
+              if (n.height = 0, n.depth = 0, n.children)
+                for (let l = 0; l < n.children.length; l++)
+                  n.children[l].height = 0, n.children[l].depth = 0;
+              return n = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: n
+                }]
+              }, e), O.makeSpan(["mord"], [n], e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = dt(Ze(t.body), e), l = new Y.MathNode("mphantom", n), c = new Y.MathNode("mpadded", [l]);
+              return c.setAttribute("height", "0px"), c.setAttribute("depth", "0px"), c;
+            }
+          }), ne({
+            type: "vphantom",
+            names: ["\\vphantom"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                parser: n
+              } = t;
+              const l = e[0];
+              return {
+                type: "vphantom",
+                mode: n.mode,
+                body: l
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = O.makeSpan(["inner"], [ve(t.body, e.withPhantom())]), l = O.makeSpan(["fix"], []);
+              return O.makeSpan(["mord", "rlap"], [n, l], e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = dt(Ze(t.body), e), l = new Y.MathNode("mphantom", n), c = new Y.MathNode("mpadded", [l]);
+              return c.setAttribute("width", "0px"), c;
+            }
+          }), ne({
+            type: "raisebox",
+            names: ["\\raisebox"],
+            props: {
+              numArgs: 2,
+              argTypes: ["size", "hbox"],
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              const l = pe(e[0], "size").value, c = e[1];
+              return {
+                type: "raisebox",
+                mode: n.mode,
+                dy: l,
+                body: c
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = ve(t.body, e), l = Ne(t.dy, e);
+              return O.makeVList({
+                positionType: "shift",
+                positionData: -l,
+                children: [{
+                  type: "elem",
+                  elem: n
+                }]
+              }, e);
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mpadded", [Ie(t.body, e)]), l = t.dy.number + t.dy.unit;
+              return n.setAttribute("voffset", l), n;
+            }
+          }), ne({
+            type: "internal",
+            names: ["\\relax"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0
+            },
+            handler(t) {
+              let {
+                parser: e
+              } = t;
+              return {
+                type: "internal",
+                mode: e.mode
+              };
+            }
+          }), ne({
+            type: "rule",
+            names: ["\\rule"],
+            props: {
+              numArgs: 2,
+              numOptionalArgs: 1,
+              argTypes: ["size", "size", "size"]
+            },
+            handler(t, e, n) {
+              let {
+                parser: l
+              } = t;
+              const c = n[0], m = pe(e[0], "size"), b = pe(e[1], "size");
+              return {
+                type: "rule",
+                mode: l.mode,
+                shift: c && pe(c, "size").value,
+                width: m.value,
+                height: b.value
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = O.makeSpan(["mord", "rule"], [], e), l = Ne(t.width, e), c = Ne(t.height, e), m = t.shift ? Ne(t.shift, e) : 0;
+              return n.style.borderRightWidth = $(l), n.style.borderTopWidth = $(c), n.style.bottom = $(m), n.width = l, n.height = c + m, n.depth = -m, n.maxFontSize = c * 1.125 * e.sizeMultiplier, n;
+            },
+            mathmlBuilder(t, e) {
+              const n = Ne(t.width, e), l = Ne(t.height, e), c = t.shift ? Ne(t.shift, e) : 0, m = e.color && e.getColor() || "black", b = new Y.MathNode("mspace");
+              b.setAttribute("mathbackground", m), b.setAttribute("width", $(n)), b.setAttribute("height", $(l));
+              const _ = new Y.MathNode("mpadded", [b]);
+              return c >= 0 ? _.setAttribute("height", $(c)) : (_.setAttribute("height", $(c)), _.setAttribute("depth", $(-c))), _.setAttribute("voffset", $(c)), _;
+            }
+          });
+          function Vi(t, e, n) {
+            const l = Je(t, e, !1), c = e.sizeMultiplier / n.sizeMultiplier;
+            for (let m = 0; m < l.length; m++) {
+              const b = l[m].classes.indexOf("sizing");
+              b < 0 ? Array.prototype.push.apply(l[m].classes, e.sizingClasses(n)) : l[m].classes[b + 1] === "reset-size" + e.size && (l[m].classes[b + 1] = "reset-size" + n.size), l[m].height *= c, l[m].depth *= c;
+            }
+            return O.makeFragment(l);
+          }
+          const Wi = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"];
+          ne({
+            type: "sizing",
+            names: Wi,
+            props: {
+              numArgs: 0,
+              allowedInText: !0
+            },
+            handler: (t, e) => {
+              let {
+                breakOnTokenText: n,
+                funcName: l,
+                parser: c
+              } = t;
+              const m = c.parseExpression(!1, n);
+              return {
+                type: "sizing",
+                mode: c.mode,
+                // Figure out what size to use based on the list of functions above
+                size: Wi.indexOf(l) + 1,
+                body: m
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = e.havingSize(t.size);
+              return Vi(t.body, n, e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = e.havingSize(t.size), l = dt(t.body, n), c = new Y.MathNode("mstyle", l);
+              return c.setAttribute("mathsize", $(n.sizeMultiplier)), c;
+            }
+          }), ne({
+            type: "smash",
+            names: ["\\smash"],
+            props: {
+              numArgs: 1,
+              numOptionalArgs: 1,
+              allowedInText: !0
+            },
+            handler: (t, e, n) => {
+              let {
+                parser: l
+              } = t, c = !1, m = !1;
+              const b = n[0] && pe(n[0], "ordgroup");
+              if (b) {
+                let x = "";
+                for (let F = 0; F < b.body.length; ++F)
+                  if (x = b.body[F].text, x === "t")
+                    c = !0;
+                  else if (x === "b")
+                    m = !0;
+                  else {
+                    c = !1, m = !1;
+                    break;
+                  }
+              } else
+                c = !0, m = !0;
+              const _ = e[0];
+              return {
+                type: "smash",
+                mode: l.mode,
+                body: _,
+                smashHeight: c,
+                smashDepth: m
+              };
+            },
+            htmlBuilder: (t, e) => {
+              const n = O.makeSpan([], [ve(t.body, e)]);
+              if (!t.smashHeight && !t.smashDepth)
+                return n;
+              if (t.smashHeight && (n.height = 0, n.children))
+                for (let c = 0; c < n.children.length; c++)
+                  n.children[c].height = 0;
+              if (t.smashDepth && (n.depth = 0, n.children))
+                for (let c = 0; c < n.children.length; c++)
+                  n.children[c].depth = 0;
+              const l = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: n
+                }]
+              }, e);
+              return O.makeSpan(["mord"], [l], e);
+            },
+            mathmlBuilder: (t, e) => {
+              const n = new Y.MathNode("mpadded", [Ie(t.body, e)]);
+              return t.smashHeight && n.setAttribute("height", "0px"), t.smashDepth && n.setAttribute("depth", "0px"), n;
+            }
+          }), ne({
+            type: "sqrt",
+            names: ["\\sqrt"],
+            props: {
+              numArgs: 1,
+              numOptionalArgs: 1
+            },
+            handler(t, e, n) {
+              let {
+                parser: l
+              } = t;
+              const c = n[0], m = e[0];
+              return {
+                type: "sqrt",
+                mode: l.mode,
+                body: m,
+                index: c
+              };
+            },
+            htmlBuilder(t, e) {
+              let n = ve(t.body, e.havingCrampedStyle());
+              n.height === 0 && (n.height = e.fontMetrics().xHeight), n = O.wrapFragment(n, e);
+              const c = e.fontMetrics().defaultRuleThickness;
+              let m = c;
+              e.style.id < ae.TEXT.id && (m = e.fontMetrics().xHeight);
+              let b = c + m / 4;
+              const _ = n.height + n.depth + b + c, {
+                span: x,
+                ruleWidth: F,
+                advanceWidth: B
+              } = d0.sqrtImage(_, e), I = x.height - F;
+              I > n.height + n.depth + b && (b = (b + I - n.height - n.depth) / 2);
+              const q = x.height - n.height - b - F;
+              n.style.paddingLeft = $(B);
+              const W = O.makeVList({
+                positionType: "firstBaseline",
+                children: [{
+                  type: "elem",
+                  elem: n,
+                  wrapperClasses: ["svg-align"]
+                }, {
+                  type: "kern",
+                  size: -(n.height + q)
+                }, {
+                  type: "elem",
+                  elem: x
+                }, {
+                  type: "kern",
+                  size: F
+                }]
+              }, e);
+              if (t.index) {
+                const se = e.havingStyle(ae.SCRIPTSCRIPT), ue = ve(t.index, se, e), xe = 0.6 * (W.height - W.depth), we = O.makeVList({
+                  positionType: "shift",
+                  positionData: -xe,
+                  children: [{
+                    type: "elem",
+                    elem: ue
+                  }]
+                }, e), De = O.makeSpan(["root"], [we]);
+                return O.makeSpan(["mord", "sqrt"], [De, W], e);
+              } else
+                return O.makeSpan(["mord", "sqrt"], [W], e);
+            },
+            mathmlBuilder(t, e) {
+              const {
+                body: n,
+                index: l
+              } = t;
+              return l ? new Y.MathNode("mroot", [Ie(n, e), Ie(l, e)]) : new Y.MathNode("msqrt", [Ie(n, e)]);
+            }
+          });
+          const ji = {
+            display: ae.DISPLAY,
+            text: ae.TEXT,
+            script: ae.SCRIPT,
+            scriptscript: ae.SCRIPTSCRIPT
+          };
+          ne({
+            type: "styling",
+            names: ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0,
+              primitive: !0
+            },
+            handler(t, e) {
+              let {
+                breakOnTokenText: n,
+                funcName: l,
+                parser: c
+              } = t;
+              const m = c.parseExpression(!0, n), b = l.slice(1, l.length - 5);
+              return {
+                type: "styling",
+                mode: c.mode,
+                // Figure out what style to use by pulling out the style from
+                // the function name
+                style: b,
+                body: m
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = ji[t.style], l = e.havingStyle(n).withFont("");
+              return Vi(t.body, l, e);
+            },
+            mathmlBuilder(t, e) {
+              const n = ji[t.style], l = e.havingStyle(n), c = dt(t.body, l), m = new Y.MathNode("mstyle", c), _ = {
+                display: ["0", "true"],
+                text: ["0", "false"],
+                script: ["1", "false"],
+                scriptscript: ["2", "false"]
+              }[t.style];
+              return m.setAttribute("scriptlevel", _[0]), m.setAttribute("displaystyle", _[1]), m;
+            }
+          });
+          const qu = function(t, e) {
+            const n = t.base;
+            return n ? n.type === "op" ? n.limits && (e.style.size === ae.DISPLAY.size || n.alwaysHandleSupSub) ? nn : null : n.type === "operatorname" ? n.alwaysHandleSupSub && (e.style.size === ae.DISPLAY.size || n.limits) ? Gi : null : n.type === "accent" ? R.isCharacterBox(n.base) ? Pr : null : n.type === "horizBrace" && !t.sub === n.isOver ? qi : null : null;
+          };
+          P0({
+            type: "supsub",
+            htmlBuilder(t, e) {
+              const n = qu(t, e);
+              if (n)
+                return n(t, e);
+              const {
+                base: l,
+                sup: c,
+                sub: m
+              } = t, b = ve(l, e);
+              let _, x;
+              const F = e.fontMetrics();
+              let B = 0, I = 0;
+              const q = l && R.isCharacterBox(l);
+              if (c) {
+                const Fe = e.havingStyle(e.style.sup());
+                _ = ve(c, Fe, e), q || (B = b.height - Fe.fontMetrics().supDrop * Fe.sizeMultiplier / e.sizeMultiplier);
+              }
+              if (m) {
+                const Fe = e.havingStyle(e.style.sub());
+                x = ve(m, Fe, e), q || (I = b.depth + Fe.fontMetrics().subDrop * Fe.sizeMultiplier / e.sizeMultiplier);
+              }
+              let W;
+              e.style === ae.DISPLAY ? W = F.sup1 : e.style.cramped ? W = F.sup3 : W = F.sup2;
+              const se = e.sizeMultiplier, ue = $(0.5 / F.ptPerEm / se);
+              let xe = null;
+              if (x) {
+                const Fe = t.base && t.base.type === "op" && t.base.name && (t.base.name === "\\oiint" || t.base.name === "\\oiiint");
+                (b instanceof st || Fe) && (xe = $(-b.italic));
+              }
+              let we;
+              if (_ && x) {
+                B = Math.max(B, W, _.depth + 0.25 * F.xHeight), I = Math.max(I, F.sub2);
+                const qe = 4 * F.defaultRuleThickness;
+                if (B - _.depth - (x.height - I) < qe) {
+                  I = qe - (B - _.depth) + x.height;
+                  const $e = 0.8 * F.xHeight - (B - _.depth);
+                  $e > 0 && (B += $e, I -= $e);
+                }
+                const lt = [{
+                  type: "elem",
+                  elem: x,
+                  shift: I,
+                  marginRight: ue,
+                  marginLeft: xe
+                }, {
+                  type: "elem",
+                  elem: _,
+                  shift: -B,
+                  marginRight: ue
+                }];
+                we = O.makeVList({
+                  positionType: "individualShift",
+                  children: lt
+                }, e);
+              } else if (x) {
+                I = Math.max(I, F.sub1, x.height - 0.8 * F.xHeight);
+                const Fe = [{
+                  type: "elem",
+                  elem: x,
+                  marginLeft: xe,
+                  marginRight: ue
+                }];
+                we = O.makeVList({
+                  positionType: "shift",
+                  positionData: I,
+                  children: Fe
+                }, e);
+              } else if (_)
+                B = Math.max(B, W, _.depth + 0.25 * F.xHeight), we = O.makeVList({
+                  positionType: "shift",
+                  positionData: -B,
+                  children: [{
+                    type: "elem",
+                    elem: _,
+                    marginRight: ue
+                  }]
+                }, e);
+              else
+                throw new Error("supsub must have either sup or sub.");
+              const De = Rr(b, "right") || "mord";
+              return O.makeSpan([De], [b, O.makeSpan(["msupsub"], [we])], e);
+            },
+            mathmlBuilder(t, e) {
+              let n = !1, l, c;
+              t.base && t.base.type === "horizBrace" && (c = !!t.sup, c === t.base.isOver && (n = !0, l = t.base.isOver)), t.base && (t.base.type === "op" || t.base.type === "operatorname") && (t.base.parentIsSupSub = !0);
+              const m = [Ie(t.base, e)];
+              t.sub && m.push(Ie(t.sub, e)), t.sup && m.push(Ie(t.sup, e));
+              let b;
+              if (n)
+                b = l ? "mover" : "munder";
+              else if (t.sub)
+                if (t.sup) {
+                  const _ = t.base;
+                  _ && _.type === "op" && _.limits && e.style === ae.DISPLAY || _ && _.type === "operatorname" && _.alwaysHandleSupSub && (e.style === ae.DISPLAY || _.limits) ? b = "munderover" : b = "msubsup";
+                } else {
+                  const _ = t.base;
+                  _ && _.type === "op" && _.limits && (e.style === ae.DISPLAY || _.alwaysHandleSupSub) || _ && _.type === "operatorname" && _.alwaysHandleSupSub && (_.limits || e.style === ae.DISPLAY) ? b = "munder" : b = "msub";
+                }
+              else {
+                const _ = t.base;
+                _ && _.type === "op" && _.limits && (e.style === ae.DISPLAY || _.alwaysHandleSupSub) || _ && _.type === "operatorname" && _.alwaysHandleSupSub && (_.limits || e.style === ae.DISPLAY) ? b = "mover" : b = "msup";
+              }
+              return new Y.MathNode(b, m);
+            }
+          }), P0({
+            type: "atom",
+            htmlBuilder(t, e) {
+              return O.mathsym(t.text, t.mode, e, ["m" + t.family]);
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mo", [Et(t.text, t.mode)]);
+              if (t.family === "bin") {
+                const l = Or(t, e);
+                l === "bold-italic" && n.setAttribute("mathvariant", l);
+              } else
+                t.family === "punct" ? n.setAttribute("separator", "true") : (t.family === "open" || t.family === "close") && n.setAttribute("stretchy", "false");
+              return n;
+            }
+          });
+          const Xi = {
+            mi: "italic",
+            mn: "normal",
+            mtext: "normal"
+          };
+          P0({
+            type: "mathord",
+            htmlBuilder(t, e) {
+              return O.makeOrd(t, e, "mathord");
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mi", [Et(t.text, t.mode, e)]), l = Or(t, e) || "italic";
+              return l !== Xi[n.type] && n.setAttribute("mathvariant", l), n;
+            }
+          }), P0({
+            type: "textord",
+            htmlBuilder(t, e) {
+              return O.makeOrd(t, e, "textord");
+            },
+            mathmlBuilder(t, e) {
+              const n = Et(t.text, t.mode, e), l = Or(t, e) || "normal";
+              let c;
+              return t.mode === "text" ? c = new Y.MathNode("mtext", [n]) : /[0-9]/.test(t.text) ? c = new Y.MathNode("mn", [n]) : t.text === "\\prime" ? c = new Y.MathNode("mo", [n]) : c = new Y.MathNode("mi", [n]), l !== Xi[c.type] && c.setAttribute("mathvariant", l), c;
+            }
+          });
+          const ns = {
+            "\\nobreak": "nobreak",
+            "\\allowbreak": "allowbreak"
+          }, rs = {
+            " ": {},
+            "\\ ": {},
+            "~": {
+              className: "nobreak"
+            },
+            "\\space": {},
+            "\\nobreakspace": {
+              className: "nobreak"
+            }
+          };
+          P0({
+            type: "spacing",
+            htmlBuilder(t, e) {
+              if (rs.hasOwnProperty(t.text)) {
+                const n = rs[t.text].className || "";
+                if (t.mode === "text") {
+                  const l = O.makeOrd(t, e, "textord");
+                  return l.classes.push(n), l;
+                } else
+                  return O.makeSpan(["mspace", n], [O.mathsym(t.text, t.mode, e)], e);
+              } else {
+                if (ns.hasOwnProperty(t.text))
+                  return O.makeSpan(["mspace", ns[t.text]], [], e);
+                throw new u('Unknown type of space "' + t.text + '"');
+              }
+            },
+            mathmlBuilder(t, e) {
+              let n;
+              if (rs.hasOwnProperty(t.text))
+                n = new Y.MathNode("mtext", [new Y.TextNode(" ")]);
+              else {
+                if (ns.hasOwnProperty(t.text))
+                  return new Y.MathNode("mspace");
+                throw new u('Unknown type of space "' + t.text + '"');
+              }
+              return n;
+            }
+          });
+          const Yi = () => {
+            const t = new Y.MathNode("mtd", []);
+            return t.setAttribute("width", "50%"), t;
+          };
+          P0({
+            type: "tag",
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mtable", [new Y.MathNode("mtr", [Yi(), new Y.MathNode("mtd", [v0(t.body, e)]), Yi(), new Y.MathNode("mtd", [v0(t.tag, e)])])]);
+              return n.setAttribute("width", "100%"), n;
+            }
+          });
+          const Zi = {
+            "\\text": void 0,
+            "\\textrm": "textrm",
+            "\\textsf": "textsf",
+            "\\texttt": "texttt",
+            "\\textnormal": "textrm"
+          }, Ki = {
+            "\\textbf": "textbf",
+            "\\textmd": "textmd"
+          }, Pu = {
+            "\\textit": "textit",
+            "\\textup": "textup"
+          }, Qi = (t, e) => {
+            const n = t.font;
+            return n ? Zi[n] ? e.withTextFontFamily(Zi[n]) : Ki[n] ? e.withTextFontWeight(Ki[n]) : e.withTextFontShape(Pu[n]) : e;
+          };
+          ne({
+            type: "text",
+            names: [
+              // Font families
+              "\\text",
+              "\\textrm",
+              "\\textsf",
+              "\\texttt",
+              "\\textnormal",
+              // Font weights
+              "\\textbf",
+              "\\textmd",
+              // Font Shapes
+              "\\textit",
+              "\\textup"
+            ],
+            props: {
+              numArgs: 1,
+              argTypes: ["text"],
+              allowedInArgument: !0,
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n,
+                funcName: l
+              } = t;
+              const c = e[0];
+              return {
+                type: "text",
+                mode: n.mode,
+                body: Ze(c),
+                font: l
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = Qi(t, e), l = Je(t.body, n, !0);
+              return O.makeSpan(["mord", "text"], l, n);
+            },
+            mathmlBuilder(t, e) {
+              const n = Qi(t, e);
+              return v0(t.body, n);
+            }
+          }), ne({
+            type: "underline",
+            names: ["\\underline"],
+            props: {
+              numArgs: 1,
+              allowedInText: !0
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "underline",
+                mode: n.mode,
+                body: e[0]
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = ve(t.body, e), l = O.makeLineSpan("underline-line", e), c = e.fontMetrics().defaultRuleThickness, m = O.makeVList({
+                positionType: "top",
+                positionData: n.height,
+                children: [{
+                  type: "kern",
+                  size: c
+                }, {
+                  type: "elem",
+                  elem: l
+                }, {
+                  type: "kern",
+                  size: 3 * c
+                }, {
+                  type: "elem",
+                  elem: n
+                }]
+              }, e);
+              return O.makeSpan(["mord", "underline"], [m], e);
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.MathNode("mo", [new Y.TextNode("‾")]);
+              n.setAttribute("stretchy", "true");
+              const l = new Y.MathNode("munder", [Ie(t.body, e), n]);
+              return l.setAttribute("accentunder", "true"), l;
+            }
+          }), ne({
+            type: "vcenter",
+            names: ["\\vcenter"],
+            props: {
+              numArgs: 1,
+              argTypes: ["original"],
+              // In LaTeX, \vcenter can act only on a box.
+              allowedInText: !1
+            },
+            handler(t, e) {
+              let {
+                parser: n
+              } = t;
+              return {
+                type: "vcenter",
+                mode: n.mode,
+                body: e[0]
+              };
+            },
+            htmlBuilder(t, e) {
+              const n = ve(t.body, e), l = e.fontMetrics().axisHeight, c = 0.5 * (n.height - l - (n.depth + l));
+              return O.makeVList({
+                positionType: "shift",
+                positionData: c,
+                children: [{
+                  type: "elem",
+                  elem: n
+                }]
+              }, e);
+            },
+            mathmlBuilder(t, e) {
+              return new Y.MathNode("mpadded", [Ie(t.body, e)], ["vcenter"]);
+            }
+          }), ne({
+            type: "verb",
+            names: ["\\verb"],
+            props: {
+              numArgs: 0,
+              allowedInText: !0
+            },
+            handler(t, e, n) {
+              throw new u("\\verb ended by end of line instead of matching delimiter");
+            },
+            htmlBuilder(t, e) {
+              const n = Ji(t), l = [], c = e.havingStyle(e.style.text());
+              for (let m = 0; m < n.length; m++) {
+                let b = n[m];
+                b === "~" && (b = "\\textasciitilde"), l.push(O.makeSymbol(b, "Typewriter-Regular", t.mode, c, ["mord", "texttt"]));
+              }
+              return O.makeSpan(["mord", "text"].concat(c.sizingClasses(e)), O.tryCombineChars(l), c);
+            },
+            mathmlBuilder(t, e) {
+              const n = new Y.TextNode(Ji(t)), l = new Y.MathNode("mtext", [n]);
+              return l.setAttribute("mathvariant", "monospace"), l;
+            }
+          });
+          const Ji = (t) => t.body.replace(/ /g, t.star ? "␣" : " ");
+          var S0 = ri;
+          const $i = `[ \r
+	]`, Hu = "\\\\[a-zA-Z@]+", Uu = "\\\\[^\uD800-\uDFFF]", Gu = "(" + Hu + ")" + $i + "*", Vu = `\\\\(
+|[ \r	]+
+?)[ \r	]*`, ss = "[̀-ͯ]", Wu = new RegExp(ss + "+$"), ju = "(" + $i + "+)|" + // whitespace
+          (Vu + "|") + // \whitespace
+          "([!-\\[\\]-‧‪-퟿豈-￿]" + // single codepoint
+          (ss + "*") + // ...plus accents
+          "|[\uD800-\uDBFF][\uDC00-\uDFFF]" + // surrogate pair
+          (ss + "*") + // ...plus accents
+          "|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5" + // \verb unstarred
+          ("|" + Gu) + // \macroName + spaces
+          ("|" + Uu + ")");
+          class el {
+            // Category codes. The lexer only supports comment characters (14) for now.
+            // MacroExpander additionally distinguishes active (13).
+            constructor(e, n) {
+              this.input = void 0, this.settings = void 0, this.tokenRegex = void 0, this.catcodes = void 0, this.input = e, this.settings = n, this.tokenRegex = new RegExp(ju, "g"), this.catcodes = {
+                "%": 14,
+                // comment character
+                "~": 13
+                // active character
+              };
+            }
+            setCatcode(e, n) {
+              this.catcodes[e] = n;
+            }
+            /**
+             * This function lexes a single token.
+             */
+            lex() {
+              const e = this.input, n = this.tokenRegex.lastIndex;
+              if (n === e.length)
+                return new Ct("EOF", new bt(this, n, n));
+              const l = this.tokenRegex.exec(e);
+              if (l === null || l.index !== n)
+                throw new u("Unexpected character: '" + e[n] + "'", new Ct(e[n], new bt(this, n, n + 1)));
+              const c = l[6] || l[3] || (l[2] ? "\\ " : " ");
+              if (this.catcodes[c] === 14) {
+                const m = e.indexOf(`
+`, this.tokenRegex.lastIndex);
+                return m === -1 ? (this.tokenRegex.lastIndex = e.length, this.settings.reportNonstrict("commentAtEnd", "% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")) : this.tokenRegex.lastIndex = m + 1, this.lex();
+              }
+              return new Ct(c, new bt(this, n, this.tokenRegex.lastIndex));
+            }
+          }
+          class Xu {
+            /**
+             * Both arguments are optional.  The first argument is an object of
+             * built-in mappings which never change.  The second argument is an object
+             * of initial (global-level) mappings, which will constantly change
+             * according to any global/top-level `set`s done.
+             */
+            constructor(e, n) {
+              e === void 0 && (e = {}), n === void 0 && (n = {}), this.current = void 0, this.builtins = void 0, this.undefStack = void 0, this.current = n, this.builtins = e, this.undefStack = [];
+            }
+            /**
+             * Start a new nested group, affecting future local `set`s.
+             */
+            beginGroup() {
+              this.undefStack.push({});
+            }
+            /**
+             * End current nested group, restoring values before the group began.
+             */
+            endGroup() {
+              if (this.undefStack.length === 0)
+                throw new u("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");
+              const e = this.undefStack.pop();
+              for (const n in e)
+                e.hasOwnProperty(n) && (e[n] == null ? delete this.current[n] : this.current[n] = e[n]);
+            }
+            /**
+             * Ends all currently nested groups (if any), restoring values before the
+             * groups began.  Useful in case of an error in the middle of parsing.
+             */
+            endGroups() {
+              for (; this.undefStack.length > 0; )
+                this.endGroup();
+            }
+            /**
+             * Detect whether `name` has a definition.  Equivalent to
+             * `get(name) != null`.
+             */
+            has(e) {
+              return this.current.hasOwnProperty(e) || this.builtins.hasOwnProperty(e);
+            }
+            /**
+             * Get the current value of a name, or `undefined` if there is no value.
+             *
+             * Note: Do not use `if (namespace.get(...))` to detect whether a macro
+             * is defined, as the definition may be the empty string which evaluates
+             * to `false` in JavaScript.  Use `if (namespace.get(...) != null)` or
+             * `if (namespace.has(...))`.
+             */
+            get(e) {
+              return this.current.hasOwnProperty(e) ? this.current[e] : this.builtins[e];
+            }
+            /**
+             * Set the current value of a name, and optionally set it globally too.
+             * Local set() sets the current value and (when appropriate) adds an undo
+             * operation to the undo stack.  Global set() may change the undo
+             * operation at every level, so takes time linear in their number.
+             * A value of undefined means to delete existing definitions.
+             */
+            set(e, n, l) {
+              if (l === void 0 && (l = !1), l) {
+                for (let c = 0; c < this.undefStack.length; c++)
+                  delete this.undefStack[c][e];
+                this.undefStack.length > 0 && (this.undefStack[this.undefStack.length - 1][e] = n);
+              } else {
+                const c = this.undefStack[this.undefStack.length - 1];
+                c && !c.hasOwnProperty(e) && (c[e] = this.current[e]);
+              }
+              n == null ? delete this.current[e] : this.current[e] = n;
+            }
+          }
+          var Yu = Ci;
+          k("\\noexpand", function(t) {
+            const e = t.popToken();
+            return t.isExpandable(e.text) && (e.noexpand = !0, e.treatAsRelax = !0), {
+              tokens: [e],
+              numArgs: 0
+            };
+          }), k("\\expandafter", function(t) {
+            const e = t.popToken();
+            return t.expandOnce(!0), {
+              tokens: [e],
+              numArgs: 0
+            };
+          }), k("\\@firstoftwo", function(t) {
+            return {
+              tokens: t.consumeArgs(2)[0],
+              numArgs: 0
+            };
+          }), k("\\@secondoftwo", function(t) {
+            return {
+              tokens: t.consumeArgs(2)[1],
+              numArgs: 0
+            };
+          }), k("\\@ifnextchar", function(t) {
+            const e = t.consumeArgs(3);
+            t.consumeSpaces();
+            const n = t.future();
+            return e[0].length === 1 && e[0][0].text === n.text ? {
+              tokens: e[1],
+              numArgs: 0
+            } : {
+              tokens: e[2],
+              numArgs: 0
+            };
+          }), k("\\@ifstar", "\\@ifnextchar *{\\@firstoftwo{#1}}"), k("\\TextOrMath", function(t) {
+            const e = t.consumeArgs(2);
+            return t.mode === "text" ? {
+              tokens: e[0],
+              numArgs: 0
+            } : {
+              tokens: e[1],
+              numArgs: 0
+            };
+          });
+          const tl = {
+            0: 0,
+            1: 1,
+            2: 2,
+            3: 3,
+            4: 4,
+            5: 5,
+            6: 6,
+            7: 7,
+            8: 8,
+            9: 9,
+            a: 10,
+            A: 10,
+            b: 11,
+            B: 11,
+            c: 12,
+            C: 12,
+            d: 13,
+            D: 13,
+            e: 14,
+            E: 14,
+            f: 15,
+            F: 15
+          };
+          k("\\char", function(t) {
+            let e = t.popToken(), n, l = "";
+            if (e.text === "'")
+              n = 8, e = t.popToken();
+            else if (e.text === '"')
+              n = 16, e = t.popToken();
+            else if (e.text === "`")
+              if (e = t.popToken(), e.text[0] === "\\")
+                l = e.text.charCodeAt(1);
+              else {
+                if (e.text === "EOF")
+                  throw new u("\\char` missing argument");
+                l = e.text.charCodeAt(0);
+              }
+            else
+              n = 10;
+            if (n) {
+              if (l = tl[e.text], l == null || l >= n)
+                throw new u("Invalid base-" + n + " digit " + e.text);
+              let c;
+              for (; (c = tl[t.future().text]) != null && c < n; )
+                l *= n, l += c, t.popToken();
+            }
+            return "\\@char{" + l + "}";
+          });
+          const is = (t, e, n) => {
+            let l = t.consumeArg().tokens;
+            if (l.length !== 1)
+              throw new u("\\newcommand's first argument must be a macro name");
+            const c = l[0].text, m = t.isDefined(c);
+            if (m && !e)
+              throw new u("\\newcommand{" + c + "} attempting to redefine " + (c + "; use \\renewcommand"));
+            if (!m && !n)
+              throw new u("\\renewcommand{" + c + "} when command " + c + " does not yet exist; use \\newcommand");
+            let b = 0;
+            if (l = t.consumeArg().tokens, l.length === 1 && l[0].text === "[") {
+              let _ = "", x = t.expandNextToken();
+              for (; x.text !== "]" && x.text !== "EOF"; )
+                _ += x.text, x = t.expandNextToken();
+              if (!_.match(/^\s*[0-9]+\s*$/))
+                throw new u("Invalid number of arguments: " + _);
+              b = parseInt(_), l = t.consumeArg().tokens;
+            }
+            return t.macros.set(c, {
+              tokens: l,
+              numArgs: b
+            }), "";
+          };
+          k("\\newcommand", (t) => is(t, !1, !0)), k("\\renewcommand", (t) => is(t, !0, !1)), k("\\providecommand", (t) => is(t, !0, !0)), k("\\message", (t) => {
+            const e = t.consumeArgs(1)[0];
+            return console.log(e.reverse().map((n) => n.text).join("")), "";
+          }), k("\\errmessage", (t) => {
+            const e = t.consumeArgs(1)[0];
+            return console.error(e.reverse().map((n) => n.text).join("")), "";
+          }), k("\\show", (t) => {
+            const e = t.popToken(), n = e.text;
+            return console.log(e, t.macros.get(n), S0[n], Le.math[n], Le.text[n]), "";
+          }), k("\\bgroup", "{"), k("\\egroup", "}"), k("~", "\\nobreakspace"), k("\\lq", "`"), k("\\rq", "'"), k("\\aa", "\\r a"), k("\\AA", "\\r A"), k("\\textcopyright", "\\html@mathml{\\textcircled{c}}{\\char`©}"), k("\\copyright", "\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"), k("\\textregistered", "\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`®}"), k("ℬ", "\\mathscr{B}"), k("ℰ", "\\mathscr{E}"), k("ℱ", "\\mathscr{F}"), k("���", "\\mathscr{H}"), k("ℐ", "\\mathscr{I}"), k("ℒ", "\\mathscr{L}"), k("ℳ", "\\mathscr{M}"), k("ℛ", "\\mathscr{R}"), k("ℭ", "\\mathfrak{C}"), k("ℌ", "\\mathfrak{H}"), k("ℨ", "\\mathfrak{Z}"), k("\\Bbbk", "\\Bbb{k}"), k("·", "\\cdotp"), k("\\llap", "\\mathllap{\\textrm{#1}}"), k("\\rlap", "\\mathrlap{\\textrm{#1}}"), k("\\clap", "\\mathclap{\\textrm{#1}}"), k("\\mathstrut", "\\vphantom{(}"), k("\\underbar", "\\underline{\\text{#1}}"), k("\\not", '\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'), k("\\neq", "\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`≠}}"), k("\\ne", "\\neq"), k("≠", "\\neq"), k("\\notin", "\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`∉}}"), k("∉", "\\notin"), k("≘", "\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`≘}}"), k("≙", "\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`≘}}"), k("≚", "\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`≚}}"), k("≛", "\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`≛}}"), k("≝", "\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`≝}}"), k("≞", "\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`≞}}"), k("≟", "\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`≟}}"), k("⟂", "\\perp"), k("‼", "\\mathclose{!\\mkern-0.8mu!}"), k("∌", "\\notni"), k("⌜", "\\ulcorner"), k("⌝", "\\urcorner"), k("⌞", "\\llcorner"), k("⌟", "\\lrcorner"), k("©", "\\copyright"), k("®", "\\textregistered"), k("️", "\\textregistered"), k("\\ulcorner", '\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'), k("\\urcorner", '\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'), k("\\llcorner", '\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'), k("\\lrcorner", '\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'), k("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}"), k("⋮", "\\vdots"), k("\\varGamma", "\\mathit{\\Gamma}"), k("\\varDelta", "\\mathit{\\Delta}"), k("\\varTheta", "\\mathit{\\Theta}"), k("\\varLambda", "\\mathit{\\Lambda}"), k("\\varXi", "\\mathit{\\Xi}"), k("\\varPi", "\\mathit{\\Pi}"), k("\\varSigma", "\\mathit{\\Sigma}"), k("\\varUpsilon", "\\mathit{\\Upsilon}"), k("\\varPhi", "\\mathit{\\Phi}"), k("\\varPsi", "\\mathit{\\Psi}"), k("\\varOmega", "\\mathit{\\Omega}"), k("\\substack", "\\begin{subarray}{c}#1\\end{subarray}"), k("\\colon", "\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"), k("\\boxed", "\\fbox{$\\displaystyle{#1}$}"), k("\\iff", "\\DOTSB\\;\\Longleftrightarrow\\;"), k("\\implies", "\\DOTSB\\;\\Longrightarrow\\;"), k("\\impliedby", "\\DOTSB\\;\\Longleftarrow\\;");
+          const nl = {
+            ",": "\\dotsc",
+            "\\not": "\\dotsb",
+            // \keybin@ checks for the following:
+            "+": "\\dotsb",
+            "=": "\\dotsb",
+            "<": "\\dotsb",
+            ">": "\\dotsb",
+            "-": "\\dotsb",
+            "*": "\\dotsb",
+            ":": "\\dotsb",
+            // Symbols whose definition starts with \DOTSB:
+            "\\DOTSB": "\\dotsb",
+            "\\coprod": "\\dotsb",
+            "\\bigvee": "\\dotsb",
+            "\\bigwedge": "\\dotsb",
+            "\\biguplus": "\\dotsb",
+            "\\bigcap": "\\dotsb",
+            "\\bigcup": "\\dotsb",
+            "\\prod": "\\dotsb",
+            "\\sum": "\\dotsb",
+            "\\bigotimes": "\\dotsb",
+            "\\bigoplus": "\\dotsb",
+            "\\bigodot": "\\dotsb",
+            "\\bigsqcup": "\\dotsb",
+            "\\And": "\\dotsb",
+            "\\longrightarrow": "\\dotsb",
+            "\\Longrightarrow": "\\dotsb",
+            "\\longleftarrow": "\\dotsb",
+            "\\Longleftarrow": "\\dotsb",
+            "\\longleftrightarrow": "\\dotsb",
+            "\\Longleftrightarrow": "\\dotsb",
+            "\\mapsto": "\\dotsb",
+            "\\longmapsto": "\\dotsb",
+            "\\hookrightarrow": "\\dotsb",
+            "\\doteq": "\\dotsb",
+            // Symbols whose definition starts with \mathbin:
+            "\\mathbin": "\\dotsb",
+            // Symbols whose definition starts with \mathrel:
+            "\\mathrel": "\\dotsb",
+            "\\relbar": "\\dotsb",
+            "\\Relbar": "\\dotsb",
+            "\\xrightarrow": "\\dotsb",
+            "\\xleftarrow": "\\dotsb",
+            // Symbols whose definition starts with \DOTSI:
+            "\\DOTSI": "\\dotsi",
+            "\\int": "\\dotsi",
+            "\\oint": "\\dotsi",
+            "\\iint": "\\dotsi",
+            "\\iiint": "\\dotsi",
+            "\\iiiint": "\\dotsi",
+            "\\idotsint": "\\dotsi",
+            // Symbols whose definition starts with \DOTSX:
+            "\\DOTSX": "\\dotsx"
+          };
+          k("\\dots", function(t) {
+            let e = "\\dotso";
+            const n = t.expandAfterFuture().text;
+            return n in nl ? e = nl[n] : (n.slice(0, 4) === "\\not" || n in Le.math && R.contains(["bin", "rel"], Le.math[n].group)) && (e = "\\dotsb"), e;
+          });
+          const ls = {
+            // \rightdelim@ checks for the following:
+            ")": !0,
+            "]": !0,
+            "\\rbrack": !0,
+            "\\}": !0,
+            "\\rbrace": !0,
+            "\\rangle": !0,
+            "\\rceil": !0,
+            "\\rfloor": !0,
+            "\\rgroup": !0,
+            "\\rmoustache": !0,
+            "\\right": !0,
+            "\\bigr": !0,
+            "\\biggr": !0,
+            "\\Bigr": !0,
+            "\\Biggr": !0,
+            // \extra@ also tests for the following:
+            $: !0,
+            // \extrap@ checks for the following:
+            ";": !0,
+            ".": !0,
+            ",": !0
+          };
+          k("\\dotso", function(t) {
+            return t.future().text in ls ? "\\ldots\\," : "\\ldots";
+          }), k("\\dotsc", function(t) {
+            const e = t.future().text;
+            return e in ls && e !== "," ? "\\ldots\\," : "\\ldots";
+          }), k("\\cdots", function(t) {
+            return t.future().text in ls ? "\\@cdots\\," : "\\@cdots";
+          }), k("\\dotsb", "\\cdots"), k("\\dotsm", "\\cdots"), k("\\dotsi", "\\!\\cdots"), k("\\dotsx", "\\ldots\\,"), k("\\DOTSI", "\\relax"), k("\\DOTSB", "\\relax"), k("\\DOTSX", "\\relax"), k("\\tmspace", "\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"), k("\\,", "\\tmspace+{3mu}{.1667em}"), k("\\thinspace", "\\,"), k("\\>", "\\mskip{4mu}"), k("\\:", "\\tmspace+{4mu}{.2222em}"), k("\\medspace", "\\:"), k("\\;", "\\tmspace+{5mu}{.2777em}"), k("\\thickspace", "\\;"), k("\\!", "\\tmspace-{3mu}{.1667em}"), k("\\negthinspace", "\\!"), k("\\negmedspace", "\\tmspace-{4mu}{.2222em}"), k("\\negthickspace", "\\tmspace-{5mu}{.277em}"), k("\\enspace", "\\kern.5em "), k("\\enskip", "\\hskip.5em\\relax"), k("\\quad", "\\hskip1em\\relax"), k("\\qquad", "\\hskip2em\\relax"), k("\\tag", "\\@ifstar\\tag@literal\\tag@paren"), k("\\tag@paren", "\\tag@literal{({#1})}"), k("\\tag@literal", (t) => {
+            if (t.macros.get("\\df@tag"))
+              throw new u("Multiple \\tag");
+            return "\\gdef\\df@tag{\\text{#1}}";
+          }), k("\\bmod", "\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"), k("\\pod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"), k("\\pmod", "\\pod{{\\rm mod}\\mkern6mu#1}"), k("\\mod", "\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"), k("\\newline", "\\\\\\relax"), k("\\TeX", "\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");
+          const rl = $(gt["Main-Regular"][84][1] - 0.7 * gt["Main-Regular"][65][1]);
+          k("\\LaTeX", "\\textrm{\\html@mathml{" + ("L\\kern-.36em\\raisebox{" + rl + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{LaTeX}}"), k("\\KaTeX", "\\textrm{\\html@mathml{" + ("K\\kern-.17em\\raisebox{" + rl + "}{\\scriptstyle A}") + "\\kern-.15em\\TeX}{KaTeX}}"), k("\\hspace", "\\@ifstar\\@hspacer\\@hspace"), k("\\@hspace", "\\hskip #1\\relax"), k("\\@hspacer", "\\rule{0pt}{0pt}\\hskip #1\\relax"), k("\\ordinarycolon", ":"), k("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"), k("\\dblcolon", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'), k("\\coloneqq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'), k("\\Coloneqq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'), k("\\coloneq", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'), k("\\Coloneq", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'), k("\\eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'), k("\\Eqqcolon", '\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'), k("\\eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'), k("\\Eqcolon", '\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'), k("\\colonapprox", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'), k("\\Colonapprox", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'), k("\\colonsim", '\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'), k("\\Colonsim", '\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'), k("∷", "\\dblcolon"), k("∹", "\\eqcolon"), k("≔", "\\coloneqq"), k("≕", "\\eqqcolon"), k("⩴", "\\Coloneqq"), k("\\ratio", "\\vcentcolon"), k("\\coloncolon", "\\dblcolon"), k("\\colonequals", "\\coloneqq"), k("\\coloncolonequals", "\\Coloneqq"), k("\\equalscolon", "\\eqqcolon"), k("\\equalscoloncolon", "\\Eqqcolon"), k("\\colonminus", "\\coloneq"), k("\\coloncolonminus", "\\Coloneq"), k("\\minuscolon", "\\eqcolon"), k("\\minuscoloncolon", "\\Eqcolon"), k("\\coloncolonapprox", "\\Colonapprox"), k("\\coloncolonsim", "\\Colonsim"), k("\\simcolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"), k("\\simcoloncolon", "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"), k("\\approxcolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"), k("\\approxcoloncolon", "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"), k("\\notni", "\\html@mathml{\\not\\ni}{\\mathrel{\\char`∌}}"), k("\\limsup", "\\DOTSB\\operatorname*{lim\\,sup}"), k("\\liminf", "\\DOTSB\\operatorname*{lim\\,inf}"), k("\\injlim", "\\DOTSB\\operatorname*{inj\\,lim}"), k("\\projlim", "\\DOTSB\\operatorname*{proj\\,lim}"), k("\\varlimsup", "\\DOTSB\\operatorname*{\\overline{lim}}"), k("\\varliminf", "\\DOTSB\\operatorname*{\\underline{lim}}"), k("\\varinjlim", "\\DOTSB\\operatorname*{\\underrightarrow{lim}}"), k("\\varprojlim", "\\DOTSB\\operatorname*{\\underleftarrow{lim}}"), k("\\gvertneqq", "\\html@mathml{\\@gvertneqq}{≩}"), k("\\lvertneqq", "\\html@mathml{\\@lvertneqq}{≨}"), k("\\ngeqq", "\\html@mathml{\\@ngeqq}{≱}"), k("\\ngeqslant", "\\html@mathml{\\@ngeqslant}{≱}"), k("\\nleqq", "\\html@mathml{\\@nleqq}{≰}"), k("\\nleqslant", "\\html@mathml{\\@nleqslant}{≰}"), k("\\nshortmid", "\\html@mathml{\\@nshortmid}{∤}"), k("\\nshortparallel", "\\html@mathml{\\@nshortparallel}{∦}"), k("\\nsubseteqq", "\\html@mathml{\\@nsubseteqq}{⊈}"), k("\\nsupseteqq", "\\html@mathml{\\@nsupseteqq}{⊉}"), k("\\varsubsetneq", "\\html@mathml{\\@varsubsetneq}{⊊}"), k("\\varsubsetneqq", "\\html@mathml{\\@varsubsetneqq}{⫋}"), k("\\varsupsetneq", "\\html@mathml{\\@varsupsetneq}{⊋}"), k("\\varsupsetneqq", "\\html@mathml{\\@varsupsetneqq}{⫌}"), k("\\imath", "\\html@mathml{\\@imath}{ı}"), k("\\jmath", "\\html@mathml{\\@jmath}{ȷ}"), k("\\llbracket", "\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`⟦}}"), k("\\rrbracket", "\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`⟧}}"), k("⟦", "\\llbracket"), k("⟧", "\\rrbracket"), k("\\lBrace", "\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`⦃}}"), k("\\rBrace", "\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`⦄}}"), k("⦃", "\\lBrace"), k("⦄", "\\rBrace"), k("\\minuso", "\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`⦵}}"), k("⦵", "\\minuso"), k("\\darr", "\\downarrow"), k("\\dArr", "\\Downarrow"), k("\\Darr", "\\Downarrow"), k("\\lang", "\\langle"), k("\\rang", "\\rangle"), k("\\uarr", "\\uparrow"), k("\\uArr", "\\Uparrow"), k("\\Uarr", "\\Uparrow"), k("\\N", "\\mathbb{N}"), k("\\R", "\\mathbb{R}"), k("\\Z", "\\mathbb{Z}"), k("\\alef", "\\aleph"), k("\\alefsym", "\\aleph"), k("\\Alpha", "\\mathrm{A}"), k("\\Beta", "\\mathrm{B}"), k("\\bull", "\\bullet"), k("\\Chi", "\\mathrm{X}"), k("\\clubs", "\\clubsuit"), k("\\cnums", "\\mathbb{C}"), k("\\Complex", "\\mathbb{C}"), k("\\Dagger", "\\ddagger"), k("\\diamonds", "\\diamondsuit"), k("\\empty", "\\emptyset"), k("\\Epsilon", "\\mathrm{E}"), k("\\Eta", "\\mathrm{H}"), k("\\exist", "\\exists"), k("\\harr", "\\leftrightarrow"), k("\\hArr", "\\Leftrightarrow"), k("\\Harr", "\\Leftrightarrow"), k("\\hearts", "\\heartsuit"), k("\\image", "\\Im"), k("\\infin", "\\infty"), k("\\Iota", "\\mathrm{I}"), k("\\isin", "\\in"), k("\\Kappa", "\\mathrm{K}"), k("\\larr", "\\leftarrow"), k("\\lArr", "\\Leftarrow"), k("\\Larr", "\\Leftarrow"), k("\\lrarr", "\\leftrightarrow"), k("\\lrArr", "\\Leftrightarrow"), k("\\Lrarr", "\\Leftrightarrow"), k("\\Mu", "\\mathrm{M}"), k("\\natnums", "\\mathbb{N}"), k("\\Nu", "\\mathrm{N}"), k("\\Omicron", "\\mathrm{O}"), k("\\plusmn", "\\pm"), k("\\rarr", "\\rightarrow"), k("\\rArr", "\\Rightarrow"), k("\\Rarr", "\\Rightarrow"), k("\\real", "\\Re"), k("\\reals", "\\mathbb{R}"), k("\\Reals", "\\mathbb{R}"), k("\\Rho", "\\mathrm{P}"), k("\\sdot", "\\cdot"), k("\\sect", "\\S"), k("\\spades", "\\spadesuit"), k("\\sub", "\\subset"), k("\\sube", "\\subseteq"), k("\\supe", "\\supseteq"), k("\\Tau", "\\mathrm{T}"), k("\\thetasym", "\\vartheta"), k("\\weierp", "\\wp"), k("\\Zeta", "\\mathrm{Z}"), k("\\argmin", "\\DOTSB\\operatorname*{arg\\,min}"), k("\\argmax", "\\DOTSB\\operatorname*{arg\\,max}"), k("\\plim", "\\DOTSB\\mathop{\\operatorname{plim}}\\limits"), k("\\bra", "\\mathinner{\\langle{#1}|}"), k("\\ket", "\\mathinner{|{#1}\\rangle}"), k("\\braket", "\\mathinner{\\langle{#1}\\rangle}"), k("\\Bra", "\\left\\langle#1\\right|"), k("\\Ket", "\\left|#1\\right\\rangle");
+          const sl = (t) => (e) => {
+            const n = e.consumeArg().tokens, l = e.consumeArg().tokens, c = e.consumeArg().tokens, m = e.consumeArg().tokens, b = e.macros.get("|"), _ = e.macros.get("\\|");
+            e.macros.beginGroup();
+            const x = (I) => (q) => {
+              t && (q.macros.set("|", b), c.length && q.macros.set("\\|", _));
+              let W = I;
+              return !I && c.length && q.future().text === "|" && (q.popToken(), W = !0), {
+                tokens: W ? c : l,
+                numArgs: 0
+              };
+            };
+            e.macros.set("|", x(!1)), c.length && e.macros.set("\\|", x(!0));
+            const F = e.consumeArg().tokens, B = e.expandTokens([
+              ...m,
+              ...F,
+              ...n
+              // reversed
+            ]);
+            return e.macros.endGroup(), {
+              tokens: B.reverse(),
+              numArgs: 0
+            };
+          };
+          k("\\bra@ket", sl(!1)), k("\\bra@set", sl(!0)), k("\\Braket", "\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"), k("\\Set", "\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"), k("\\set", "\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"), k("\\angln", "{\\angl n}"), k("\\blue", "\\textcolor{##6495ed}{#1}"), k("\\orange", "\\textcolor{##ffa500}{#1}"), k("\\pink", "\\textcolor{##ff00af}{#1}"), k("\\red", "\\textcolor{##df0030}{#1}"), k("\\green", "\\textcolor{##28ae7b}{#1}"), k("\\gray", "\\textcolor{gray}{#1}"), k("\\purple", "\\textcolor{##9d38bd}{#1}"), k("\\blueA", "\\textcolor{##ccfaff}{#1}"), k("\\blueB", "\\textcolor{##80f6ff}{#1}"), k("\\blueC", "\\textcolor{##63d9ea}{#1}"), k("\\blueD", "\\textcolor{##11accd}{#1}"), k("\\blueE", "\\textcolor{##0c7f99}{#1}"), k("\\tealA", "\\textcolor{##94fff5}{#1}"), k("\\tealB", "\\textcolor{##26edd5}{#1}"), k("\\tealC", "\\textcolor{##01d1c1}{#1}"), k("\\tealD", "\\textcolor{##01a995}{#1}"), k("\\tealE", "\\textcolor{##208170}{#1}"), k("\\greenA", "\\textcolor{##b6ffb0}{#1}"), k("\\greenB", "\\textcolor{##8af281}{#1}"), k("\\greenC", "\\textcolor{##74cf70}{#1}"), k("\\greenD", "\\textcolor{##1fab54}{#1}"), k("\\greenE", "\\textcolor{##0d923f}{#1}"), k("\\goldA", "\\textcolor{##ffd0a9}{#1}"), k("\\goldB", "\\textcolor{##ffbb71}{#1}"), k("\\goldC", "\\textcolor{##ff9c39}{#1}"), k("\\goldD", "\\textcolor{##e07d10}{#1}"), k("\\goldE", "\\textcolor{##a75a05}{#1}"), k("\\redA", "\\textcolor{##fca9a9}{#1}"), k("\\redB", "\\textcolor{##ff8482}{#1}"), k("\\redC", "\\textcolor{##f9685d}{#1}"), k("\\redD", "\\textcolor{##e84d39}{#1}"), k("\\redE", "\\textcolor{##bc2612}{#1}"), k("\\maroonA", "\\textcolor{##ffbde0}{#1}"), k("\\maroonB", "\\textcolor{##ff92c6}{#1}"), k("\\maroonC", "\\textcolor{##ed5fa6}{#1}"), k("\\maroonD", "\\textcolor{##ca337c}{#1}"), k("\\maroonE", "\\textcolor{##9e034e}{#1}"), k("\\purpleA", "\\textcolor{##ddd7ff}{#1}"), k("\\purpleB", "\\textcolor{##c6b9fc}{#1}"), k("\\purpleC", "\\textcolor{##aa87ff}{#1}"), k("\\purpleD", "\\textcolor{##7854ab}{#1}"), k("\\purpleE", "\\textcolor{##543b78}{#1}"), k("\\mintA", "\\textcolor{##f5f9e8}{#1}"), k("\\mintB", "\\textcolor{##edf2df}{#1}"), k("\\mintC", "\\textcolor{##e0e5cc}{#1}"), k("\\grayA", "\\textcolor{##f6f7f7}{#1}"), k("\\grayB", "\\textcolor{##f0f1f2}{#1}"), k("\\grayC", "\\textcolor{##e3e5e6}{#1}"), k("\\grayD", "\\textcolor{##d6d8da}{#1}"), k("\\grayE", "\\textcolor{##babec2}{#1}"), k("\\grayF", "\\textcolor{##888d93}{#1}"), k("\\grayG", "\\textcolor{##626569}{#1}"), k("\\grayH", "\\textcolor{##3b3e40}{#1}"), k("\\grayI", "\\textcolor{##21242c}{#1}"), k("\\kaBlue", "\\textcolor{##314453}{#1}"), k("\\kaGreen", "\\textcolor{##71B307}{#1}");
+          const il = {
+            "^": !0,
+            // Parser.js
+            _: !0,
+            // Parser.js
+            "\\limits": !0,
+            // Parser.js
+            "\\nolimits": !0
+            // Parser.js
+          };
+          class Zu {
+            constructor(e, n, l) {
+              this.settings = void 0, this.expansionCount = void 0, this.lexer = void 0, this.macros = void 0, this.stack = void 0, this.mode = void 0, this.settings = n, this.expansionCount = 0, this.feed(e), this.macros = new Xu(Yu, n.macros), this.mode = l, this.stack = [];
+            }
+            /**
+             * Feed a new input string to the same MacroExpander
+             * (with existing macros etc.).
+             */
+            feed(e) {
+              this.lexer = new el(e, this.settings);
+            }
+            /**
+             * Switches between "text" and "math" modes.
+             */
+            switchMode(e) {
+              this.mode = e;
+            }
+            /**
+             * Start a new group nesting within all namespaces.
+             */
+            beginGroup() {
+              this.macros.beginGroup();
+            }
+            /**
+             * End current group nesting within all namespaces.
+             */
+            endGroup() {
+              this.macros.endGroup();
+            }
+            /**
+             * Ends all currently nested groups (if any), restoring values before the
+             * groups began.  Useful in case of an error in the middle of parsing.
+             */
+            endGroups() {
+              this.macros.endGroups();
+            }
+            /**
+             * Returns the topmost token on the stack, without expanding it.
+             * Similar in behavior to TeX's `\futurelet`.
+             */
+            future() {
+              return this.stack.length === 0 && this.pushToken(this.lexer.lex()), this.stack[this.stack.length - 1];
+            }
+            /**
+             * Remove and return the next unexpanded token.
+             */
+            popToken() {
+              return this.future(), this.stack.pop();
+            }
+            /**
+             * Add a given token to the token stack.  In particular, this get be used
+             * to put back a token returned from one of the other methods.
+             */
+            pushToken(e) {
+              this.stack.push(e);
+            }
+            /**
+             * Append an array of tokens to the token stack.
+             */
+            pushTokens(e) {
+              this.stack.push(...e);
+            }
+            /**
+             * Find an macro argument without expanding tokens and append the array of
+             * tokens to the token stack. Uses Token as a container for the result.
+             */
+            scanArgument(e) {
+              let n, l, c;
+              if (e) {
+                if (this.consumeSpaces(), this.future().text !== "[")
+                  return null;
+                n = this.popToken(), {
+                  tokens: c,
+                  end: l
+                } = this.consumeArg(["]"]);
+              } else
+                ({
+                  tokens: c,
+                  start: n,
+                  end: l
+                } = this.consumeArg());
+              return this.pushToken(new Ct("EOF", l.loc)), this.pushTokens(c), n.range(l, "");
+            }
+            /**
+             * Consume all following space tokens, without expansion.
+             */
+            consumeSpaces() {
+              for (; this.future().text === " "; )
+                this.stack.pop();
+            }
+            /**
+             * Consume an argument from the token stream, and return the resulting array
+             * of tokens and start/end token.
+             */
+            consumeArg(e) {
+              const n = [], l = e && e.length > 0;
+              l || this.consumeSpaces();
+              const c = this.future();
+              let m, b = 0, _ = 0;
+              do {
+                if (m = this.popToken(), n.push(m), m.text === "{")
+                  ++b;
+                else if (m.text === "}") {
+                  if (--b, b === -1)
+                    throw new u("Extra }", m);
+                } else if (m.text === "EOF")
+                  throw new u("Unexpected end of input in a macro argument, expected '" + (e && l ? e[_] : "}") + "'", m);
+                if (e && l)
+                  if ((b === 0 || b === 1 && e[_] === "{") && m.text === e[_]) {
+                    if (++_, _ === e.length) {
+                      n.splice(-_, _);
+                      break;
+                    }
+                  } else
+                    _ = 0;
+              } while (b !== 0 || l);
+              return c.text === "{" && n[n.length - 1].text === "}" && (n.pop(), n.shift()), n.reverse(), {
+                tokens: n,
+                start: c,
+                end: m
+              };
+            }
+            /**
+             * Consume the specified number of (delimited) arguments from the token
+             * stream and return the resulting array of arguments.
+             */
+            consumeArgs(e, n) {
+              if (n) {
+                if (n.length !== e + 1)
+                  throw new u("The length of delimiters doesn't match the number of args!");
+                const c = n[0];
+                for (let m = 0; m < c.length; m++) {
+                  const b = this.popToken();
+                  if (c[m] !== b.text)
+                    throw new u("Use of the macro doesn't match its definition", b);
+                }
+              }
+              const l = [];
+              for (let c = 0; c < e; c++)
+                l.push(this.consumeArg(n && n[c + 1]).tokens);
+              return l;
+            }
+            /**
+             * Increment `expansionCount` by the specified amount.
+             * Throw an error if it exceeds `maxExpand`.
+             */
+            countExpansion(e) {
+              if (this.expansionCount += e, this.expansionCount > this.settings.maxExpand)
+                throw new u("Too many expansions: infinite loop or need to increase maxExpand setting");
+            }
+            /**
+             * Expand the next token only once if possible.
+             *
+             * If the token is expanded, the resulting tokens will be pushed onto
+             * the stack in reverse order, and the number of such tokens will be
+             * returned.  This number might be zero or positive.
+             *
+             * If not, the return value is `false`, and the next token remains at the
+             * top of the stack.
+             *
+             * In either case, the next token will be on the top of the stack,
+             * or the stack will be empty (in case of empty expansion
+             * and no other tokens).
+             *
+             * Used to implement `expandAfterFuture` and `expandNextToken`.
+             *
+             * If expandableOnly, only expandable tokens are expanded and
+             * an undefined control sequence results in an error.
+             */
+            expandOnce(e) {
+              const n = this.popToken(), l = n.text, c = n.noexpand ? null : this._getExpansion(l);
+              if (c == null || e && c.unexpandable) {
+                if (e && c == null && l[0] === "\\" && !this.isDefined(l))
+                  throw new u("Undefined control sequence: " + l);
+                return this.pushToken(n), !1;
+              }
+              this.countExpansion(1);
+              let m = c.tokens;
+              const b = this.consumeArgs(c.numArgs, c.delimiters);
+              if (c.numArgs) {
+                m = m.slice();
+                for (let _ = m.length - 1; _ >= 0; --_) {
+                  let x = m[_];
+                  if (x.text === "#") {
+                    if (_ === 0)
+                      throw new u("Incomplete placeholder at end of macro body", x);
+                    if (x = m[--_], x.text === "#")
+                      m.splice(_ + 1, 1);
+                    else if (/^[1-9]$/.test(x.text))
+                      m.splice(_, 2, ...b[+x.text - 1]);
+                    else
+                      throw new u("Not a valid argument number", x);
+                  }
+                }
+              }
+              return this.pushTokens(m), m.length;
+            }
+            /**
+             * Expand the next token only once (if possible), and return the resulting
+             * top token on the stack (without removing anything from the stack).
+             * Similar in behavior to TeX's `\expandafter\futurelet`.
+             * Equivalent to expandOnce() followed by future().
+             */
+            expandAfterFuture() {
+              return this.expandOnce(), this.future();
+            }
+            /**
+             * Recursively expand first token, then return first non-expandable token.
+             */
+            expandNextToken() {
+              for (; ; )
+                if (this.expandOnce() === !1) {
+                  const e = this.stack.pop();
+                  return e.treatAsRelax && (e.text = "\\relax"), e;
+                }
+              throw new Error();
+            }
+            /**
+             * Fully expand the given macro name and return the resulting list of
+             * tokens, or return `undefined` if no such macro is defined.
+             */
+            expandMacro(e) {
+              return this.macros.has(e) ? this.expandTokens([new Ct(e)]) : void 0;
+            }
+            /**
+             * Fully expand the given token stream and return the resulting list of
+             * tokens.  Note that the input tokens are in reverse order, but the
+             * output tokens are in forward order.
+             */
+            expandTokens(e) {
+              const n = [], l = this.stack.length;
+              for (this.pushTokens(e); this.stack.length > l; )
+                if (this.expandOnce(!0) === !1) {
+                  const c = this.stack.pop();
+                  c.treatAsRelax && (c.noexpand = !1, c.treatAsRelax = !1), n.push(c);
+                }
+              return this.countExpansion(n.length), n;
+            }
+            /**
+             * Fully expand the given macro name and return the result as a string,
+             * or return `undefined` if no such macro is defined.
+             */
+            expandMacroAsText(e) {
+              const n = this.expandMacro(e);
+              return n && n.map((l) => l.text).join("");
+            }
+            /**
+             * Returns the expanded macro as a reversed array of tokens and a macro
+             * argument count.  Or returns `null` if no such macro.
+             */
+            _getExpansion(e) {
+              const n = this.macros.get(e);
+              if (n == null)
+                return n;
+              if (e.length === 1) {
+                const c = this.lexer.catcodes[e];
+                if (c != null && c !== 13)
+                  return;
+              }
+              const l = typeof n == "function" ? n(this) : n;
+              if (typeof l == "string") {
+                let c = 0;
+                if (l.indexOf("#") !== -1) {
+                  const F = l.replace(/##/g, "");
+                  for (; F.indexOf("#" + (c + 1)) !== -1; )
+                    ++c;
+                }
+                const m = new el(l, this.settings), b = [];
+                let _ = m.lex();
+                for (; _.text !== "EOF"; )
+                  b.push(_), _ = m.lex();
+                return b.reverse(), {
+                  tokens: b,
+                  numArgs: c
+                };
+              }
+              return l;
+            }
+            /**
+             * Determine whether a command is currently "defined" (has some
+             * functionality), meaning that it's a macro (in the current group),
+             * a function, a symbol, or one of the special commands listed in
+             * `implicitCommands`.
+             */
+            isDefined(e) {
+              return this.macros.has(e) || S0.hasOwnProperty(e) || Le.math.hasOwnProperty(e) || Le.text.hasOwnProperty(e) || il.hasOwnProperty(e);
+            }
+            /**
+             * Determine whether a command is expandable.
+             */
+            isExpandable(e) {
+              const n = this.macros.get(e);
+              return n != null ? typeof n == "string" || typeof n == "function" || !n.unexpandable : S0.hasOwnProperty(e) && !S0[e].primitive;
+            }
+          }
+          const ll = /^[₊₋₌₍₎₀₁₂₃₄₅₆₇₈₉ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ]/, er = Object.freeze({
+            "₊": "+",
+            "₋": "-",
+            "₌": "=",
+            "₍": "(",
+            "₎": ")",
+            "₀": "0",
+            "₁": "1",
+            "₂": "2",
+            "₃": "3",
+            "₄": "4",
+            "₅": "5",
+            "₆": "6",
+            "₇": "7",
+            "₈": "8",
+            "₉": "9",
+            "ₐ": "a",
+            "ₑ": "e",
+            "ₕ": "h",
+            "ᵢ": "i",
+            "ⱼ": "j",
+            "ₖ": "k",
+            "ₗ": "l",
+            "ₘ": "m",
+            "ₙ": "n",
+            "ₒ": "o",
+            "ₚ": "p",
+            "ᵣ": "r",
+            "ₛ": "s",
+            "ₜ": "t",
+            "ᵤ": "u",
+            "ᵥ": "v",
+            "ₓ": "x",
+            "ᵦ": "β",
+            "ᵧ": "γ",
+            "ᵨ": "ρ",
+            "ᵩ": "ϕ",
+            "ᵪ": "χ",
+            "⁺": "+",
+            "⁻": "-",
+            "⁼": "=",
+            "⁽": "(",
+            "⁾": ")",
+            "⁰": "0",
+            "¹": "1",
+            "²": "2",
+            "³": "3",
+            "⁴": "4",
+            "⁵": "5",
+            "⁶": "6",
+            "⁷": "7",
+            "⁸": "8",
+            "⁹": "9",
+            "ᴬ": "A",
+            "ᴮ": "B",
+            "ᴰ": "D",
+            "ᴱ": "E",
+            "ᴳ": "G",
+            "ᴴ": "H",
+            "ᴵ": "I",
+            "ᴶ": "J",
+            "ᴷ": "K",
+            "ᴸ": "L",
+            "ᴹ": "M",
+            "ᴺ": "N",
+            "ᴼ": "O",
+            "ᴾ": "P",
+            "ᴿ": "R",
+            "ᵀ": "T",
+            "ᵁ": "U",
+            "ⱽ": "V",
+            "ᵂ": "W",
+            "ᵃ": "a",
+            "ᵇ": "b",
+            "ᶜ": "c",
+            "ᵈ": "d",
+            "ᵉ": "e",
+            "ᶠ": "f",
+            "ᵍ": "g",
+            ʰ: "h",
+            "ⁱ": "i",
+            ʲ: "j",
+            "ᵏ": "k",
+            ˡ: "l",
+            "ᵐ": "m",
+            ⁿ: "n",
+            "ᵒ": "o",
+            "ᵖ": "p",
+            ʳ: "r",
+            ˢ: "s",
+            "ᵗ": "t",
+            "ᵘ": "u",
+            "ᵛ": "v",
+            ʷ: "w",
+            ˣ: "x",
+            ʸ: "y",
+            "ᶻ": "z",
+            "ᵝ": "β",
+            "ᵞ": "γ",
+            "ᵟ": "δ",
+            "ᵠ": "ϕ",
+            "ᵡ": "χ",
+            "ᶿ": "θ"
+          }), as = {
+            "́": {
+              text: "\\'",
+              math: "\\acute"
+            },
+            "̀": {
+              text: "\\`",
+              math: "\\grave"
+            },
+            "̈": {
+              text: '\\"',
+              math: "\\ddot"
+            },
+            "̃": {
+              text: "\\~",
+              math: "\\tilde"
+            },
+            "̄": {
+              text: "\\=",
+              math: "\\bar"
+            },
+            "̆": {
+              text: "\\u",
+              math: "\\breve"
+            },
+            "̌": {
+              text: "\\v",
+              math: "\\check"
+            },
+            "̂": {
+              text: "\\^",
+              math: "\\hat"
+            },
+            "̇": {
+              text: "\\.",
+              math: "\\dot"
+            },
+            "̊": {
+              text: "\\r",
+              math: "\\mathring"
+            },
+            "̋": {
+              text: "\\H"
+            },
+            "̧": {
+              text: "\\c"
+            }
+          }, al = {
+            á: "á",
+            à: "à",
+            ä: "ä",
+            ǟ: "ǟ",
+            ã: "ã",
+            ā: "ā",
+            ă: "ă",
+            ắ: "ắ",
+            ằ: "ằ",
+            ẵ: "ẵ",
+            ǎ: "ǎ",
+            â: "â",
+            ấ: "ấ",
+            ầ: "ầ",
+            ẫ: "ẫ",
+            ȧ: "ȧ",
+            ǡ: "ǡ",
+            å: "å",
+            ǻ: "ǻ",
+            ḃ: "ḃ",
+            ć: "ć",
+            ḉ: "ḉ",
+            č: "č",
+            ĉ: "ĉ",
+            ċ: "ċ",
+            ç: "ç",
+            ď: "ď",
+            ḋ: "ḋ",
+            ḑ: "ḑ",
+            é: "é",
+            è: "è",
+            ë: "ë",
+            ẽ: "ẽ",
+            ē: "ē",
+            ḗ: "ḗ",
+            ḕ: "ḕ",
+            ĕ: "ĕ",
+            ḝ: "ḝ",
+            ě: "ě",
+            ê: "ê",
+            ế: "ế",
+            ề: "ề",
+            ễ: "ễ",
+            ė: "ė",
+            ȩ: "ȩ",
+            ḟ: "ḟ",
+            ǵ: "ǵ",
+            ḡ: "ḡ",
+            ğ: "ğ",
+            ǧ: "ǧ",
+            ĝ: "ĝ",
+            ġ: "ġ",
+            ģ: "ģ",
+            ḧ: "ḧ",
+            ȟ: "ȟ",
+            ĥ: "ĥ",
+            ḣ: "ḣ",
+            ḩ: "ḩ",
+            í: "í",
+            ì: "ì",
+            ï: "ï",
+            ḯ: "ḯ",
+            ĩ: "ĩ",
+            ī: "ī",
+            ĭ: "ĭ",
+            ǐ: "ǐ",
+            î: "î",
+            ǰ: "ǰ",
+            ĵ: "ĵ",
+            ḱ: "ḱ",
+            ǩ: "ǩ",
+            ķ: "ķ",
+            ĺ: "ĺ",
+            ľ: "ľ",
+            ļ: "ļ",
+            ḿ: "ḿ",
+            ṁ: "ṁ",
+            ń: "ń",
+            ǹ: "ǹ",
+            ñ: "ñ",
+            ň: "ň",
+            ṅ: "ṅ",
+            ņ: "ņ",
+            ó: "ó",
+            ò: "ò",
+            ö: "ö",
+            ȫ: "ȫ",
+            õ: "õ",
+            ṍ: "ṍ",
+            ṏ: "ṏ",
+            ȭ: "ȭ",
+            ō: "ō",
+            ṓ: "ṓ",
+            ṑ: "ṑ",
+            ŏ: "ŏ",
+            ǒ: "ǒ",
+            ô: "ô",
+            ố: "ố",
+            ồ: "ồ",
+            ỗ: "ỗ",
+            ȯ: "ȯ",
+            ȱ: "ȱ",
+            ő: "ő",
+            ṕ: "ṕ",
+            ṗ: "ṗ",
+            ŕ: "ŕ",
+            ř: "ř",
+            ṙ: "ṙ",
+            ŗ: "ŗ",
+            ś: "ś",
+            ṥ: "ṥ",
+            š: "š",
+            ṧ: "ṧ",
+            ŝ: "ŝ",
+            ṡ: "ṡ",
+            ş: "ş",
+            ẗ: "ẗ",
+            ť: "ť",
+            ṫ: "ṫ",
+            ţ: "ţ",
+            ú: "ú",
+            ù: "ù",
+            ü: "ü",
+            ǘ: "ǘ",
+            ǜ: "ǜ",
+            ǖ: "ǖ",
+            ǚ: "ǚ",
+            ũ: "ũ",
+            ṹ: "ṹ",
+            ū: "ū",
+            ṻ: "ṻ",
+            ŭ: "ŭ",
+            ǔ: "ǔ",
+            û: "û",
+            ů: "ů",
+            ű: "ű",
+            ṽ: "ṽ",
+            ẃ: "ẃ",
+            ẁ: "ẁ",
+            ẅ: "ẅ",
+            ŵ: "ŵ",
+            ẇ: "ẇ",
+            ẘ: "ẘ",
+            ẍ: "ẍ",
+            ẋ: "ẋ",
+            ý: "ý",
+            ỳ: "ỳ",
+            ÿ: "ÿ",
+            ỹ: "ỹ",
+            ȳ: "ȳ",
+            ŷ: "ŷ",
+            ẏ: "ẏ",
+            ẙ: "ẙ",
+            ź: "ź",
+            ž: "ž",
+            ẑ: "ẑ",
+            ż: "ż",
+            Á: "Á",
+            À: "À",
+            Ä: "Ä",
+            Ǟ: "Ǟ",
+            Ã: "Ã",
+            Ā: "Ā",
+            Ă: "Ă",
+            Ắ: "Ắ",
+            Ằ: "Ằ",
+            Ẵ: "Ẵ",
+            Ǎ: "Ǎ",
+            Â: "Â",
+            Ấ: "Ấ",
+            Ầ: "Ầ",
+            Ẫ: "Ẫ",
+            Ȧ: "Ȧ",
+            Ǡ: "Ǡ",
+            Å: "Å",
+            Ǻ: "Ǻ",
+            Ḃ: "Ḃ",
+            Ć: "Ć",
+            Ḉ: "Ḉ",
+            Č: "Č",
+            Ĉ: "Ĉ",
+            Ċ: "Ċ",
+            Ç: "Ç",
+            Ď: "Ď",
+            Ḋ: "Ḋ",
+            Ḑ: "Ḑ",
+            É: "É",
+            È: "È",
+            Ë: "Ë",
+            Ẽ: "Ẽ",
+            Ē: "Ē",
+            Ḗ: "Ḗ",
+            Ḕ: "Ḕ",
+            Ĕ: "Ĕ",
+            Ḝ: "Ḝ",
+            Ě: "Ě",
+            Ê: "Ê",
+            Ế: "Ế",
+            Ề: "Ề",
+            Ễ: "Ễ",
+            Ė: "Ė",
+            Ȩ: "Ȩ",
+            Ḟ: "Ḟ",
+            Ǵ: "Ǵ",
+            Ḡ: "Ḡ",
+            Ğ: "Ğ",
+            Ǧ: "Ǧ",
+            Ĝ: "Ĝ",
+            Ġ: "Ġ",
+            Ģ: "Ģ",
+            Ḧ: "Ḧ",
+            Ȟ: "Ȟ",
+            Ĥ: "Ĥ",
+            Ḣ: "Ḣ",
+            Ḩ: "Ḩ",
+            Í: "Í",
+            Ì: "Ì",
+            Ï: "Ï",
+            Ḯ: "Ḯ",
+            Ĩ: "Ĩ",
+            Ī: "Ī",
+            Ĭ: "Ĭ",
+            Ǐ: "Ǐ",
+            Î: "Î",
+            İ: "İ",
+            Ĵ: "Ĵ",
+            Ḱ: "Ḱ",
+            Ǩ: "Ǩ",
+            Ķ: "Ķ",
+            Ĺ: "Ĺ",
+            Ľ: "Ľ",
+            Ļ: "Ļ",
+            Ḿ: "Ḿ",
+            Ṁ: "Ṁ",
+            Ń: "Ń",
+            Ǹ: "Ǹ",
+            Ñ: "Ñ",
+            Ň: "Ň",
+            Ṅ: "Ṅ",
+            Ņ: "Ņ",
+            Ó: "Ó",
+            Ò: "Ò",
+            Ö: "Ö",
+            Ȫ: "Ȫ",
+            Õ: "Õ",
+            Ṍ: "Ṍ",
+            Ṏ: "Ṏ",
+            Ȭ: "Ȭ",
+            Ō: "Ō",
+            Ṓ: "Ṓ",
+            Ṑ: "Ṑ",
+            Ŏ: "Ŏ",
+            Ǒ: "Ǒ",
+            Ô: "Ô",
+            Ố: "Ố",
+            Ồ: "Ồ",
+            Ỗ: "Ỗ",
+            Ȯ: "Ȯ",
+            Ȱ: "Ȱ",
+            Ő: "Ő",
+            Ṕ: "Ṕ",
+            Ṗ: "Ṗ",
+            Ŕ: "Ŕ",
+            Ř: "Ř",
+            Ṙ: "Ṙ",
+            Ŗ: "Ŗ",
+            Ś: "Ś",
+            Ṥ: "Ṥ",
+            Š: "Š",
+            Ṧ: "Ṧ",
+            Ŝ: "Ŝ",
+            Ṡ: "Ṡ",
+            Ş: "Ş",
+            Ť: "Ť",
+            Ṫ: "Ṫ",
+            Ţ: "Ţ",
+            Ú: "Ú",
+            Ù: "Ù",
+            Ü: "Ü",
+            Ǘ: "Ǘ",
+            Ǜ: "Ǜ",
+            Ǖ: "Ǖ",
+            Ǚ: "Ǚ",
+            Ũ: "Ũ",
+            Ṹ: "Ṹ",
+            Ū: "Ū",
+            Ṻ: "Ṻ",
+            Ŭ: "Ŭ",
+            Ǔ: "Ǔ",
+            Û: "Û",
+            Ů: "Ů",
+            Ű: "Ű",
+            Ṽ: "Ṽ",
+            Ẃ: "Ẃ",
+            Ẁ: "Ẁ",
+            Ẅ: "Ẅ",
+            Ŵ: "Ŵ",
+            Ẇ: "Ẇ",
+            Ẍ: "Ẍ",
+            Ẋ: "Ẋ",
+            Ý: "Ý",
+            Ỳ: "Ỳ",
+            Ÿ: "Ÿ",
+            Ỹ: "Ỹ",
+            Ȳ: "Ȳ",
+            Ŷ: "Ŷ",
+            Ẏ: "Ẏ",
+            Ź: "Ź",
+            Ž: "Ž",
+            Ẑ: "Ẑ",
+            Ż: "Ż",
+            ά: "ά",
+            ὰ: "ὰ",
+            ᾱ: "ᾱ",
+            ᾰ: "ᾰ",
+            έ: "έ",
+            ὲ: "ὲ",
+            ή: "ή",
+            ὴ: "ὴ",
+            ί: "ί",
+            ὶ: "ὶ",
+            ϊ: "ϊ",
+            ΐ: "ΐ",
+            ῒ: "ῒ",
+            ῑ: "ῑ",
+            ῐ: "ῐ",
+            ό: "ό",
+            ὸ: "ὸ",
+            ύ: "ύ",
+            ὺ: "ὺ",
+            ϋ: "ϋ",
+            ΰ: "ΰ",
+            ῢ: "ῢ",
+            ῡ: "ῡ",
+            ῠ: "ῠ",
+            ώ: "ώ",
+            ὼ: "ὼ",
+            Ύ: "Ύ",
+            Ὺ: "Ὺ",
+            Ϋ: "Ϋ",
+            Ῡ: "Ῡ",
+            Ῠ: "Ῠ",
+            Ώ: "Ώ",
+            Ὼ: "Ὼ"
+          };
+          class tr {
+            constructor(e, n) {
+              this.mode = void 0, this.gullet = void 0, this.settings = void 0, this.leftrightDepth = void 0, this.nextToken = void 0, this.mode = "math", this.gullet = new Zu(e, n, this.mode), this.settings = n, this.leftrightDepth = 0;
+            }
+            /**
+             * Checks a result to make sure it has the right type, and throws an
+             * appropriate error otherwise.
+             */
+            expect(e, n) {
+              if (n === void 0 && (n = !0), this.fetch().text !== e)
+                throw new u("Expected '" + e + "', got '" + this.fetch().text + "'", this.fetch());
+              n && this.consume();
+            }
+            /**
+             * Discards the current lookahead token, considering it consumed.
+             */
+            consume() {
+              this.nextToken = null;
+            }
+            /**
+             * Return the current lookahead token, or if there isn't one (at the
+             * beginning, or if the previous lookahead token was consume()d),
+             * fetch the next token as the new lookahead token and return it.
+             */
+            fetch() {
+              return this.nextToken == null && (this.nextToken = this.gullet.expandNextToken()), this.nextToken;
+            }
+            /**
+             * Switches between "text" and "math" modes.
+             */
+            switchMode(e) {
+              this.mode = e, this.gullet.switchMode(e);
+            }
+            /**
+             * Main parsing function, which parses an entire input.
+             */
+            parse() {
+              this.settings.globalGroup || this.gullet.beginGroup(), this.settings.colorIsTextColor && this.gullet.macros.set("\\color", "\\textcolor");
+              try {
+                const e = this.parseExpression(!1);
+                return this.expect("EOF"), this.settings.globalGroup || this.gullet.endGroup(), e;
+              } finally {
+                this.gullet.endGroups();
+              }
+            }
+            /**
+             * Fully parse a separate sequence of tokens as a separate job.
+             * Tokens should be specified in reverse order, as in a MacroDefinition.
+             */
+            subparse(e) {
+              const n = this.nextToken;
+              this.consume(), this.gullet.pushToken(new Ct("}")), this.gullet.pushTokens(e);
+              const l = this.parseExpression(!1);
+              return this.expect("}"), this.nextToken = n, l;
+            }
+            /**
+             * Parses an "expression", which is a list of atoms.
+             *
+             * `breakOnInfix`: Should the parsing stop when we hit infix nodes? This
+             *                 happens when functions have higher precedence han infix
+             *                 nodes in implicit parses.
+             *
+             * `breakOnTokenText`: The text of the token that the expression should end
+             *                     with, or `null` if something else should end the
+             *                     expression.
+             */
+            parseExpression(e, n) {
+              const l = [];
+              for (; ; ) {
+                this.mode === "math" && this.consumeSpaces();
+                const c = this.fetch();
+                if (tr.endOfExpression.indexOf(c.text) !== -1 || n && c.text === n || e && S0[c.text] && S0[c.text].infix)
+                  break;
+                const m = this.parseAtom(n);
+                if (m) {
+                  if (m.type === "internal")
+                    continue;
+                } else
+                  break;
+                l.push(m);
+              }
+              return this.mode === "text" && this.formLigatures(l), this.handleInfixNodes(l);
+            }
+            /**
+             * Rewrites infix operators such as \over with corresponding commands such
+             * as \frac.
+             *
+             * There can only be one infix operator per group.  If there's more than one
+             * then the expression is ambiguous.  This can be resolved by adding {}.
+             */
+            handleInfixNodes(e) {
+              let n = -1, l;
+              for (let c = 0; c < e.length; c++)
+                if (e[c].type === "infix") {
+                  if (n !== -1)
+                    throw new u("only one infix operator per group", e[c].token);
+                  n = c, l = e[c].replaceWith;
+                }
+              if (n !== -1 && l) {
+                let c, m;
+                const b = e.slice(0, n), _ = e.slice(n + 1);
+                b.length === 1 && b[0].type === "ordgroup" ? c = b[0] : c = {
+                  type: "ordgroup",
+                  mode: this.mode,
+                  body: b
+                }, _.length === 1 && _[0].type === "ordgroup" ? m = _[0] : m = {
+                  type: "ordgroup",
+                  mode: this.mode,
+                  body: _
+                };
+                let x;
+                return l === "\\\\abovefrac" ? x = this.callFunction(l, [c, e[n], m], []) : x = this.callFunction(l, [c, m], []), [x];
+              } else
+                return e;
+            }
+            /**
+             * Handle a subscript or superscript with nice errors.
+             */
+            handleSupSubscript(e) {
+              const n = this.fetch(), l = n.text;
+              this.consume(), this.consumeSpaces();
+              const c = this.parseGroup(e);
+              if (!c)
+                throw new u("Expected group after '" + l + "'", n);
+              return c;
+            }
+            /**
+             * Converts the textual input of an unsupported command into a text node
+             * contained within a color node whose color is determined by errorColor
+             */
+            formatUnsupportedCmd(e) {
+              const n = [];
+              for (let m = 0; m < e.length; m++)
+                n.push({
+                  type: "textord",
+                  mode: "text",
+                  text: e[m]
+                });
+              const l = {
+                type: "text",
+                mode: this.mode,
+                body: n
+              };
+              return {
+                type: "color",
+                mode: this.mode,
+                color: this.settings.errorColor,
+                body: [l]
+              };
+            }
+            /**
+             * Parses a group with optional super/subscripts.
+             */
+            parseAtom(e) {
+              const n = this.parseGroup("atom", e);
+              if (this.mode === "text")
+                return n;
+              let l, c;
+              for (; ; ) {
+                this.consumeSpaces();
+                const m = this.fetch();
+                if (m.text === "\\limits" || m.text === "\\nolimits") {
+                  if (n && n.type === "op") {
+                    const b = m.text === "\\limits";
+                    n.limits = b, n.alwaysHandleSupSub = !0;
+                  } else if (n && n.type === "operatorname")
+                    n.alwaysHandleSupSub && (n.limits = m.text === "\\limits");
+                  else
+                    throw new u("Limit controls must follow a math operator", m);
+                  this.consume();
+                } else if (m.text === "^") {
+                  if (l)
+                    throw new u("Double superscript", m);
+                  l = this.handleSupSubscript("superscript");
+                } else if (m.text === "_") {
+                  if (c)
+                    throw new u("Double subscript", m);
+                  c = this.handleSupSubscript("subscript");
+                } else if (m.text === "'") {
+                  if (l)
+                    throw new u("Double superscript", m);
+                  const b = {
+                    type: "textord",
+                    mode: this.mode,
+                    text: "\\prime"
+                  }, _ = [b];
+                  for (this.consume(); this.fetch().text === "'"; )
+                    _.push(b), this.consume();
+                  this.fetch().text === "^" && _.push(this.handleSupSubscript("superscript")), l = {
+                    type: "ordgroup",
+                    mode: this.mode,
+                    body: _
+                  };
+                } else if (er[m.text]) {
+                  const b = ll.test(m.text), _ = [];
+                  for (_.push(new Ct(er[m.text])), this.consume(); ; ) {
+                    const F = this.fetch().text;
+                    if (!er[F] || ll.test(F) !== b)
+                      break;
+                    _.unshift(new Ct(er[F])), this.consume();
+                  }
+                  const x = this.subparse(_);
+                  b ? c = {
+                    type: "ordgroup",
+                    mode: "math",
+                    body: x
+                  } : l = {
+                    type: "ordgroup",
+                    mode: "math",
+                    body: x
+                  };
+                } else
+                  break;
+              }
+              return l || c ? {
+                type: "supsub",
+                mode: this.mode,
+                base: n,
+                sup: l,
+                sub: c
+              } : n;
+            }
+            /**
+             * Parses an entire function, including its base and all of its arguments.
+             */
+            parseFunction(e, n) {
+              const l = this.fetch(), c = l.text, m = S0[c];
+              if (!m)
+                return null;
+              if (this.consume(), n && n !== "atom" && !m.allowedInArgument)
+                throw new u("Got function '" + c + "' with no arguments" + (n ? " as " + n : ""), l);
+              if (this.mode === "text" && !m.allowedInText)
+                throw new u("Can't use function '" + c + "' in text mode", l);
+              if (this.mode === "math" && m.allowedInMath === !1)
+                throw new u("Can't use function '" + c + "' in math mode", l);
+              const {
+                args: b,
+                optArgs: _
+              } = this.parseArguments(c, m);
+              return this.callFunction(c, b, _, l, e);
+            }
+            /**
+             * Call a function handler with a suitable context and arguments.
+             */
+            callFunction(e, n, l, c, m) {
+              const b = {
+                funcName: e,
+                parser: this,
+                token: c,
+                breakOnTokenText: m
+              }, _ = S0[e];
+              if (_ && _.handler)
+                return _.handler(b, n, l);
+              throw new u("No function handler for " + e);
+            }
+            /**
+             * Parses the arguments of a function or environment
+             */
+            parseArguments(e, n) {
+              const l = n.numArgs + n.numOptionalArgs;
+              if (l === 0)
+                return {
+                  args: [],
+                  optArgs: []
+                };
+              const c = [], m = [];
+              for (let b = 0; b < l; b++) {
+                let _ = n.argTypes && n.argTypes[b];
+                const x = b < n.numOptionalArgs;
+                (n.primitive && _ == null || // \sqrt expands into primitive if optional argument doesn't exist
+                n.type === "sqrt" && b === 1 && m[0] == null) && (_ = "primitive");
+                const F = this.parseGroupOfType("argument to '" + e + "'", _, x);
+                if (x)
+                  m.push(F);
+                else if (F != null)
+                  c.push(F);
+                else
+                  throw new u("Null argument, please report this as a bug");
+              }
+              return {
+                args: c,
+                optArgs: m
+              };
+            }
+            /**
+             * Parses a group when the mode is changing.
+             */
+            parseGroupOfType(e, n, l) {
+              switch (n) {
+                case "color":
+                  return this.parseColorGroup(l);
+                case "size":
+                  return this.parseSizeGroup(l);
+                case "url":
+                  return this.parseUrlGroup(l);
+                case "math":
+                case "text":
+                  return this.parseArgumentGroup(l, n);
+                case "hbox": {
+                  const c = this.parseArgumentGroup(l, "text");
+                  return c != null ? {
+                    type: "styling",
+                    mode: c.mode,
+                    body: [c],
+                    style: "text"
+                    // simulate \textstyle
+                  } : null;
+                }
+                case "raw": {
+                  const c = this.parseStringGroup("raw", l);
+                  return c != null ? {
+                    type: "raw",
+                    mode: "text",
+                    string: c.text
+                  } : null;
+                }
+                case "primitive": {
+                  if (l)
+                    throw new u("A primitive argument cannot be optional");
+                  const c = this.parseGroup(e);
+                  if (c == null)
+                    throw new u("Expected group as " + e, this.fetch());
+                  return c;
+                }
+                case "original":
+                case null:
+                case void 0:
+                  return this.parseArgumentGroup(l);
+                default:
+                  throw new u("Unknown group type as " + e, this.fetch());
+              }
+            }
+            /**
+             * Discard any space tokens, fetching the next non-space token.
+             */
+            consumeSpaces() {
+              for (; this.fetch().text === " "; )
+                this.consume();
+            }
+            /**
+             * Parses a group, essentially returning the string formed by the
+             * brace-enclosed tokens plus some position information.
+             */
+            parseStringGroup(e, n) {
+              const l = this.gullet.scanArgument(n);
+              if (l == null)
+                return null;
+              let c = "", m;
+              for (; (m = this.fetch()).text !== "EOF"; )
+                c += m.text, this.consume();
+              return this.consume(), l.text = c, l;
+            }
+            /**
+             * Parses a regex-delimited group: the largest sequence of tokens
+             * whose concatenated strings match `regex`. Returns the string
+             * formed by the tokens plus some position information.
+             */
+            parseRegexGroup(e, n) {
+              const l = this.fetch();
+              let c = l, m = "", b;
+              for (; (b = this.fetch()).text !== "EOF" && e.test(m + b.text); )
+                c = b, m += c.text, this.consume();
+              if (m === "")
+                throw new u("Invalid " + n + ": '" + l.text + "'", l);
+              return l.range(c, m);
+            }
+            /**
+             * Parses a color description.
+             */
+            parseColorGroup(e) {
+              const n = this.parseStringGroup("color", e);
+              if (n == null)
+                return null;
+              const l = /^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(n.text);
+              if (!l)
+                throw new u("Invalid color: '" + n.text + "'", n);
+              let c = l[0];
+              return /^[0-9a-f]{6}$/i.test(c) && (c = "#" + c), {
+                type: "color-token",
+                mode: this.mode,
+                color: c
+              };
+            }
+            /**
+             * Parses a size specification, consisting of magnitude and unit.
+             */
+            parseSizeGroup(e) {
+              let n, l = !1;
+              if (this.gullet.consumeSpaces(), !e && this.gullet.future().text !== "{" ? n = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size") : n = this.parseStringGroup("size", e), !n)
+                return null;
+              !e && n.text.length === 0 && (n.text = "0pt", l = !0);
+              const c = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(n.text);
+              if (!c)
+                throw new u("Invalid size: '" + n.text + "'", n);
+              const m = {
+                number: +(c[1] + c[2]),
+                // sign + magnitude, cast to number
+                unit: c[3]
+              };
+              if (!u0(m))
+                throw new u("Invalid unit: '" + m.unit + "'", n);
+              return {
+                type: "size",
+                mode: this.mode,
+                value: m,
+                isBlank: l
+              };
+            }
+            /**
+             * Parses an URL, checking escaped letters and allowed protocols,
+             * and setting the catcode of % as an active character (as in \hyperref).
+             */
+            parseUrlGroup(e) {
+              this.gullet.lexer.setCatcode("%", 13), this.gullet.lexer.setCatcode("~", 12);
+              const n = this.parseStringGroup("url", e);
+              if (this.gullet.lexer.setCatcode("%", 14), this.gullet.lexer.setCatcode("~", 13), n == null)
+                return null;
+              const l = n.text.replace(/\\([#$%&~_^{}])/g, "$1");
+              return {
+                type: "url",
+                mode: this.mode,
+                url: l
+              };
+            }
+            /**
+             * Parses an argument with the mode specified.
+             */
+            parseArgumentGroup(e, n) {
+              const l = this.gullet.scanArgument(e);
+              if (l == null)
+                return null;
+              const c = this.mode;
+              n && this.switchMode(n), this.gullet.beginGroup();
+              const m = this.parseExpression(!1, "EOF");
+              this.expect("EOF"), this.gullet.endGroup();
+              const b = {
+                type: "ordgroup",
+                mode: this.mode,
+                loc: l.loc,
+                body: m
+              };
+              return n && this.switchMode(c), b;
+            }
+            /**
+             * Parses an ordinary group, which is either a single nucleus (like "x")
+             * or an expression in braces (like "{x+y}") or an implicit group, a group
+             * that starts at the current position, and ends right before a higher explicit
+             * group ends, or at EOF.
+             */
+            parseGroup(e, n) {
+              const l = this.fetch(), c = l.text;
+              let m;
+              if (c === "{" || c === "\\begingroup") {
+                this.consume();
+                const b = c === "{" ? "}" : "\\endgroup";
+                this.gullet.beginGroup();
+                const _ = this.parseExpression(!1, b), x = this.fetch();
+                this.expect(b), this.gullet.endGroup(), m = {
+                  type: "ordgroup",
+                  mode: this.mode,
+                  loc: bt.range(l, x),
+                  body: _,
+                  // A group formed by \begingroup...\endgroup is a semi-simple group
+                  // which doesn't affect spacing in math mode, i.e., is transparent.
+                  // https://tex.stackexchange.com/questions/1930/when-should-one-
+                  // use-begingroup-instead-of-bgroup
+                  semisimple: c === "\\begingroup" || void 0
+                };
+              } else if (m = this.parseFunction(n, e) || this.parseSymbol(), m == null && c[0] === "\\" && !il.hasOwnProperty(c)) {
+                if (this.settings.throwOnError)
+                  throw new u("Undefined control sequence: " + c, l);
+                m = this.formatUnsupportedCmd(c), this.consume();
+              }
+              return m;
+            }
+            /**
+             * Form ligature-like combinations of characters for text mode.
+             * This includes inputs like "--", "---", "``" and "''".
+             * The result will simply replace multiple textord nodes with a single
+             * character in each value by a single textord node having multiple
+             * characters in its value.  The representation is still ASCII source.
+             * The group will be modified in place.
+             */
+            formLigatures(e) {
+              let n = e.length - 1;
+              for (let l = 0; l < n; ++l) {
+                const c = e[l], m = c.text;
+                m === "-" && e[l + 1].text === "-" && (l + 1 < n && e[l + 2].text === "-" ? (e.splice(l, 3, {
+                  type: "textord",
+                  mode: "text",
+                  loc: bt.range(c, e[l + 2]),
+                  text: "---"
+                }), n -= 2) : (e.splice(l, 2, {
+                  type: "textord",
+                  mode: "text",
+                  loc: bt.range(c, e[l + 1]),
+                  text: "--"
+                }), n -= 1)), (m === "'" || m === "`") && e[l + 1].text === m && (e.splice(l, 2, {
+                  type: "textord",
+                  mode: "text",
+                  loc: bt.range(c, e[l + 1]),
+                  text: m + m
+                }), n -= 1);
+              }
+            }
+            /**
+             * Parse a single symbol out of the string. Here, we handle single character
+             * symbols and special functions like \verb.
+             */
+            parseSymbol() {
+              const e = this.fetch();
+              let n = e.text;
+              if (/^\\verb[^a-zA-Z]/.test(n)) {
+                this.consume();
+                let m = n.slice(5);
+                const b = m.charAt(0) === "*";
+                if (b && (m = m.slice(1)), m.length < 2 || m.charAt(0) !== m.slice(-1))
+                  throw new u(`\\verb assertion failed --
+                    please report what input caused this bug`);
+                return m = m.slice(1, -1), {
+                  type: "verb",
+                  mode: "text",
+                  body: m,
+                  star: b
+                };
+              }
+              al.hasOwnProperty(n[0]) && !Le[this.mode][n[0]] && (this.settings.strict && this.mode === "math" && this.settings.reportNonstrict("unicodeTextInMathMode", 'Accented Unicode text character "' + n[0] + '" used in math mode', e), n = al[n[0]] + n.slice(1));
+              const l = Wu.exec(n);
+              l && (n = n.substring(0, l.index), n === "i" ? n = "ı" : n === "j" && (n = "ȷ"));
+              let c;
+              if (Le[this.mode][n]) {
+                this.settings.strict && this.mode === "math" && tn.indexOf(n) >= 0 && this.settings.reportNonstrict("unicodeTextInMathMode", 'Latin-1/Unicode text character "' + n[0] + '" used in math mode', e);
+                const m = Le[this.mode][n].group, b = bt.range(e);
+                let _;
+                if (Mr.hasOwnProperty(m)) {
+                  const x = m;
+                  _ = {
+                    type: "atom",
+                    mode: this.mode,
+                    family: x,
+                    loc: b,
+                    text: n
+                  };
+                } else
+                  _ = {
+                    type: m,
+                    mode: this.mode,
+                    loc: b,
+                    text: n
+                  };
+                c = _;
+              } else if (n.charCodeAt(0) >= 128)
+                this.settings.strict && (tt(n.charCodeAt(0)) ? this.mode === "math" && this.settings.reportNonstrict("unicodeTextInMathMode", 'Unicode text character "' + n[0] + '" used in math mode', e) : this.settings.reportNonstrict("unknownSymbol", 'Unrecognized Unicode character "' + n[0] + '"' + (" (" + n.charCodeAt(0) + ")"), e)), c = {
+                  type: "textord",
+                  mode: "text",
+                  loc: bt.range(e),
+                  text: n
+                };
+              else
+                return null;
+              if (this.consume(), l)
+                for (let m = 0; m < l[0].length; m++) {
+                  const b = l[0][m];
+                  if (!as[b])
+                    throw new u("Unknown accent ' " + b + "'", e);
+                  const _ = as[b][this.mode] || as[b].text;
+                  if (!_)
+                    throw new u("Accent " + b + " unsupported in " + this.mode + " mode", e);
+                  c = {
+                    type: "accent",
+                    mode: this.mode,
+                    loc: bt.range(e),
+                    label: _,
+                    isStretchy: !1,
+                    isShifty: !0,
+                    // $FlowFixMe
+                    base: c
+                  };
+                }
+              return c;
+            }
+          }
+          tr.endOfExpression = ["}", "\\endgroup", "\\end", "\\right", "&"];
+          var os = function(t, e) {
+            if (!(typeof t == "string" || t instanceof String))
+              throw new TypeError("KaTeX can only parse string typed expression");
+            const n = new tr(t, e);
+            delete n.gullet.macros.current["\\df@tag"];
+            let l = n.parse();
+            if (delete n.gullet.macros.current["\\current@color"], delete n.gullet.macros.current["\\color"], n.gullet.macros.get("\\df@tag")) {
+              if (!e.displayMode)
+                throw new u("\\tag works only in display equations");
+              l = [{
+                type: "tag",
+                mode: "text",
+                body: l,
+                tag: n.subparse([new Ct("\\df@tag")])
+              }];
+            }
+            return l;
+          };
+          let ol = function(t, e, n) {
+            e.textContent = "";
+            const l = us(t, n).toNode();
+            e.appendChild(l);
+          };
+          typeof document < "u" && document.compatMode !== "CSS1Compat" && (typeof console < "u" && console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."), ol = function() {
+            throw new u("KaTeX doesn't work in quirks mode.");
+          });
+          const Ku = function(t, e) {
+            return us(t, e).toMarkup();
+          }, Qu = function(t, e) {
+            const n = new M(e);
+            return os(t, n);
+          }, ul = function(t, e, n) {
+            if (n.throwOnError || !(t instanceof u))
+              throw t;
+            const l = O.makeSpan(["katex-error"], [new st(e)]);
+            return l.setAttribute("title", t.toString()), l.setAttribute("style", "color:" + n.errorColor), l;
+          }, us = function(t, e) {
+            const n = new M(e);
+            try {
+              const l = os(t, n);
+              return fu(l, t, n);
+            } catch (l) {
+              return ul(l, t, n);
+            }
+          };
+          var Ju = {
+            /**
+             * Current KaTeX version
+             */
+            version: "0.16.10",
+            /**
+             * Renders the given LaTeX into an HTML+MathML combination, and adds
+             * it as a child to the specified DOM node.
+             */
+            render: ol,
+            /**
+             * Renders the given LaTeX into an HTML+MathML combination string,
+             * for sending to the client.
+             */
+            renderToString: Ku,
+            /**
+             * KaTeX error, usually during parsing.
+             */
+            ParseError: u,
+            /**
+             * The shema of Settings
+             */
+            SETTINGS_SCHEMA: N,
+            /**
+             * Parses the given LaTeX into KaTeX's internal parse tree structure,
+             * without rendering to HTML or MathML.
+             *
+             * NOTE: This method is not currently recommended for public use.
+             * The internal tree representation is unstable and is very likely
+             * to change. Use at your own risk.
+             */
+            __parse: Qu,
+            /**
+             * Renders the given LaTeX into an HTML+MathML internal DOM tree
+             * representation, without flattening that representation to a string.
+             *
+             * NOTE: This method is not currently recommended for public use.
+             * The internal tree representation is unstable and is very likely
+             * to change. Use at your own risk.
+             */
+            __renderToDomTree: us,
+            /**
+             * Renders the given LaTeX into an HTML internal DOM tree representation,
+             * without MathML and without flattening that representation to a string.
+             *
+             * NOTE: This method is not currently recommended for public use.
+             * The internal tree representation is unstable and is very likely
+             * to change. Use at your own risk.
+             */
+            __renderToHTMLTree: function(t, e) {
+              const n = new M(e);
+              try {
+                const l = os(t, n);
+                return du(l, t, n);
+              } catch (l) {
+                return ul(l, t, n);
+              }
+            },
+            /**
+             * extends internal font metrics object with a new object
+             * each key in the new object represents a font name
+            */
+            __setFontMetrics: O0,
+            /**
+             * adds a new symbol to builtin symbols table
+             */
+            __defineSymbol: h,
+            /**
+             * adds a new function to builtin function list,
+             * which directly produce parse tree elements
+             * and have their own html/mathml builders
+             */
+            __defineFunction: ne,
+            /**
+             * adds a new macro to builtin macro list
+             */
+            __defineMacro: k,
+            /**
+             * Expose the dom tree node types, which can be useful for type checking nodes.
+             *
+             * NOTE: This method is not currently recommended for public use.
+             * The internal tree representation is unstable and is very likely
+             * to change. Use at your own risk.
+             */
+            __domTree: {
+              Span: Ge,
+              Anchor: Yt,
+              SymbolNode: st,
+              SvgNode: St,
+              PathNode: Pt,
+              LineNode: bn
+            }
+          }, $u = Ju;
+          return i = i.default, i;
+        }()
+      );
+    });
+  }(As)), As.exports;
+}
+(function(a, r) {
+  (function(i, o) {
+    a.exports = o(j4());
+  })(typeof self < "u" ? self : yr, function(s) {
+    return (
+      /******/
+      function() {
+        var i = {
+          /***/
+          771: (
+            /***/
+            function(p) {
+              p.exports = s;
+            }
+          )
+          /******/
+        }, o = {};
+        function u(p) {
+          var g = o[p];
+          if (g !== void 0)
+            return g.exports;
+          var y = o[p] = {
+            /******/
+            // no module.id needed
+            /******/
+            // no module.loaded needed
+            /******/
+            exports: {}
+            /******/
+          };
+          return i[p](y, y.exports, u), y.exports;
+        }
+        (function() {
+          u.n = function(p) {
+            var g = p && p.__esModule ? (
+              /******/
+              function() {
+                return p.default;
+              }
+            ) : (
+              /******/
+              function() {
+                return p;
+              }
+            );
+            return u.d(g, { a: g }), g;
+          };
+        })(), function() {
+          u.d = function(p, g) {
+            for (var y in g)
+              u.o(g, y) && !u.o(p, y) && Object.defineProperty(p, y, { enumerable: !0, get: g[y] });
+          };
+        }(), function() {
+          u.o = function(p, g) {
+            return Object.prototype.hasOwnProperty.call(p, g);
+          };
+        }();
+        var f = {};
+        return function() {
+          u.d(f, {
+            default: function() {
+              return (
+                /* binding */
+                R
+              );
+            }
+          });
+          var p = u(771), g = /* @__PURE__ */ u.n(p);
+          const y = function(N, S, M) {
+            let L = M, z = 0;
+            const H = N.length;
+            for (; L < S.length; ) {
+              const te = S[L];
+              if (z <= 0 && S.slice(L, L + H) === N)
+                return L;
+              te === "\\" ? L++ : te === "{" ? z++ : te === "}" && z--, L++;
+            }
+            return -1;
+          }, D = function(N) {
+            return N.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
+          }, T = /^\\begin{/;
+          var U = function(N, S) {
+            let M;
+            const L = [], z = new RegExp("(" + S.map((H) => D(H.left)).join("|") + ")");
+            for (; M = N.search(z), M !== -1; ) {
+              M > 0 && (L.push({
+                type: "text",
+                data: N.slice(0, M)
+              }), N = N.slice(M));
+              const H = S.findIndex((ce) => N.startsWith(ce.left));
+              if (M = y(S[H].right, N, S[H].left.length), M === -1)
+                break;
+              const te = N.slice(0, M + S[H].right.length), Q = T.test(te) ? te : N.slice(S[H].left.length, M);
+              L.push({
+                type: "math",
+                data: Q,
+                rawData: te,
+                display: S[H].display
+              }), N = N.slice(M + S[H].right.length);
+            }
+            return N !== "" && L.push({
+              type: "text",
+              data: N
+            }), L;
+          };
+          const K = function(N, S) {
+            const M = U(N, S.delimiters);
+            if (M.length === 1 && M[0].type === "text")
+              return null;
+            const L = document.createDocumentFragment();
+            for (let z = 0; z < M.length; z++)
+              if (M[z].type === "text")
+                L.appendChild(document.createTextNode(M[z].data));
+              else {
+                const H = document.createElement("span");
+                let te = M[z].data;
+                S.displayMode = M[z].display;
+                try {
+                  S.preProcess && (te = S.preProcess(te)), g().render(te, H, S);
+                } catch (Q) {
+                  if (!(Q instanceof g().ParseError))
+                    throw Q;
+                  S.errorCallback("KaTeX auto-render: Failed to parse `" + M[z].data + "` with ", Q), L.appendChild(document.createTextNode(M[z].rawData));
+                  continue;
+                }
+                L.appendChild(H);
+              }
+            return L;
+          }, ee = function(N, S) {
+            for (let M = 0; M < N.childNodes.length; M++) {
+              const L = N.childNodes[M];
+              if (L.nodeType === 3) {
+                let z = L.textContent, H = L.nextSibling, te = 0;
+                for (; H && H.nodeType === Node.TEXT_NODE; )
+                  z += H.textContent, H = H.nextSibling, te++;
+                const Q = K(z, S);
+                if (Q) {
+                  for (let ce = 0; ce < te; ce++)
+                    L.nextSibling.remove();
+                  M += Q.childNodes.length - 1, N.replaceChild(Q, L);
+                } else
+                  M += te;
+              } else if (L.nodeType === 1) {
+                const z = " " + L.className + " ";
+                S.ignoredTags.indexOf(L.nodeName.toLowerCase()) === -1 && S.ignoredClasses.every((te) => z.indexOf(" " + te + " ") === -1) && ee(L, S);
+              }
+            }
+          };
+          var R = function(N, S) {
+            if (!N)
+              throw new Error("No element provided to render");
+            const M = {};
+            for (const L in S)
+              S.hasOwnProperty(L) && (M[L] = S[L]);
+            M.delimiters = M.delimiters || [
+              {
+                left: "$$",
+                right: "$$",
+                display: !0
+              },
+              {
+                left: "\\(",
+                right: "\\)",
+                display: !1
+              },
+              // LaTeX uses $…$, but it ruins the display of normal `$` in text:
+              // {left: "$", right: "$", display: false},
+              // $ must come after $$
+              // Render AMS environments even if outside $$…$$ delimiters.
+              {
+                left: "\\begin{equation}",
+                right: "\\end{equation}",
+                display: !0
+              },
+              {
+                left: "\\begin{align}",
+                right: "\\end{align}",
+                display: !0
+              },
+              {
+                left: "\\begin{alignat}",
+                right: "\\end{alignat}",
+                display: !0
+              },
+              {
+                left: "\\begin{gather}",
+                right: "\\end{gather}",
+                display: !0
+              },
+              {
+                left: "\\begin{CD}",
+                right: "\\end{CD}",
+                display: !0
+              },
+              {
+                left: "\\[",
+                right: "\\]",
+                display: !0
+              }
+            ], M.ignoredTags = M.ignoredTags || ["script", "noscript", "style", "textarea", "pre", "code", "option"], M.ignoredClasses = M.ignoredClasses || [], M.errorCallback = M.errorCallback || console.error, M.macros = M.macros || {}, ee(N, M);
+          };
+        }(), f = f.default, f;
+      }()
+    );
+  });
+})(wo);
+var X4 = wo.exports;
+const Y4 = /* @__PURE__ */ bo(X4);
+function Hs() {
+  return {
+    async: !1,
+    breaks: !1,
+    extensions: null,
+    gfm: !0,
+    hooks: null,
+    pedantic: !1,
+    renderer: null,
+    silent: !1,
+    tokenizer: null,
+    walkTokens: null
+  };
+}
+let j0 = Hs();
+function yo(a) {
+  j0 = a;
+}
+const _o = /[&<>"']/, Z4 = new RegExp(_o.source, "g"), ko = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, K4 = new RegExp(ko.source, "g"), Q4 = {
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;",
+  '"': "&quot;",
+  "'": "&#39;"
+}, Hl = (a) => Q4[a];
+function kt(a, r) {
+  if (r) {
+    if (_o.test(a))
+      return a.replace(Z4, Hl);
+  } else if (ko.test(a))
+    return a.replace(K4, Hl);
+  return a;
+}
+const J4 = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
+function $4(a) {
+  return a.replace(J4, (r, s) => (s = s.toLowerCase(), s === "colon" ? ":" : s.charAt(0) === "#" ? s.charAt(1) === "x" ? String.fromCharCode(parseInt(s.substring(2), 16)) : String.fromCharCode(+s.substring(1)) : ""));
+}
+const eh = /(^|[^\[])\^/g;
+function ze(a, r) {
+  let s = typeof a == "string" ? a : a.source;
+  r = r || "";
+  const i = {
+    replace: (o, u) => {
+      let f = typeof u == "string" ? u : u.source;
+      return f = f.replace(eh, "$1"), s = s.replace(o, f), i;
+    },
+    getRegex: () => new RegExp(s, r)
+  };
+  return i;
+}
+function Ul(a) {
+  try {
+    a = encodeURI(a).replace(/%25/g, "%");
+  } catch {
+    return null;
+  }
+  return a;
+}
+const Tn = { exec: () => null };
+function Gl(a, r) {
+  const s = a.replace(/\|/g, (u, f, p) => {
+    let g = !1, y = f;
+    for (; --y >= 0 && p[y] === "\\"; )
+      g = !g;
+    return g ? "|" : " |";
+  }), i = s.split(/ \|/);
+  let o = 0;
+  if (i[0].trim() || i.shift(), i.length > 0 && !i[i.length - 1].trim() && i.pop(), r)
+    if (i.length > r)
+      i.splice(r);
+    else
+      for (; i.length < r; )
+        i.push("");
+  for (; o < i.length; o++)
+    i[o] = i[o].trim().replace(/\\\|/g, "|");
+  return i;
+}
+function cr(a, r, s) {
+  const i = a.length;
+  if (i === 0)
+    return "";
+  let o = 0;
+  for (; o < i; ) {
+    const u = a.charAt(i - o - 1);
+    if (u === r && !s)
+      o++;
+    else if (u !== r && s)
+      o++;
+    else
+      break;
+  }
+  return a.slice(0, i - o);
+}
+function th(a, r) {
+  if (a.indexOf(r[1]) === -1)
+    return -1;
+  let s = 0;
+  for (let i = 0; i < a.length; i++)
+    if (a[i] === "\\")
+      i++;
+    else if (a[i] === r[0])
+      s++;
+    else if (a[i] === r[1] && (s--, s < 0))
+      return i;
+  return -1;
+}
+function Vl(a, r, s, i) {
+  const o = r.href, u = r.title ? kt(r.title) : null, f = a[1].replace(/\\([\[\]])/g, "$1");
+  if (a[0].charAt(0) !== "!") {
+    i.state.inLink = !0;
+    const p = {
+      type: "link",
+      raw: s,
+      href: o,
+      title: u,
+      text: f,
+      tokens: i.inlineTokens(f)
+    };
+    return i.state.inLink = !1, p;
+  }
+  return {
+    type: "image",
+    raw: s,
+    href: o,
+    title: u,
+    text: kt(f)
+  };
+}
+function nh(a, r) {
+  const s = a.match(/^(\s+)(?:```)/);
+  if (s === null)
+    return r;
+  const i = s[1];
+  return r.split(`
+`).map((o) => {
+    const u = o.match(/^\s+/);
+    if (u === null)
+      return o;
+    const [f] = u;
+    return f.length >= i.length ? o.slice(i.length) : o;
+  }).join(`
+`);
+}
+class _r {
+  // set by the lexer
+  constructor(r) {
+    Ue(this, "options");
+    Ue(this, "rules");
+    // set by the lexer
+    Ue(this, "lexer");
+    this.options = r || j0;
+  }
+  space(r) {
+    const s = this.rules.block.newline.exec(r);
+    if (s && s[0].length > 0)
+      return {
+        type: "space",
+        raw: s[0]
+      };
+  }
+  code(r) {
+    const s = this.rules.block.code.exec(r);
+    if (s) {
+      const i = s[0].replace(/^ {1,4}/gm, "");
+      return {
+        type: "code",
+        raw: s[0],
+        codeBlockStyle: "indented",
+        text: this.options.pedantic ? i : cr(i, `
+`)
+      };
+    }
+  }
+  fences(r) {
+    const s = this.rules.block.fences.exec(r);
+    if (s) {
+      const i = s[0], o = nh(i, s[3] || "");
+      return {
+        type: "code",
+        raw: i,
+        lang: s[2] ? s[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : s[2],
+        text: o
+      };
+    }
+  }
+  heading(r) {
+    const s = this.rules.block.heading.exec(r);
+    if (s) {
+      let i = s[2].trim();
+      if (/#$/.test(i)) {
+        const o = cr(i, "#");
+        (this.options.pedantic || !o || / $/.test(o)) && (i = o.trim());
+      }
+      return {
+        type: "heading",
+        raw: s[0],
+        depth: s[1].length,
+        text: i,
+        tokens: this.lexer.inline(i)
+      };
+    }
+  }
+  hr(r) {
+    const s = this.rules.block.hr.exec(r);
+    if (s)
+      return {
+        type: "hr",
+        raw: s[0]
+      };
+  }
+  blockquote(r) {
+    const s = this.rules.block.blockquote.exec(r);
+    if (s) {
+      const i = cr(s[0].replace(/^ *>[ \t]?/gm, ""), `
+`), o = this.lexer.state.top;
+      this.lexer.state.top = !0;
+      const u = this.lexer.blockTokens(i);
+      return this.lexer.state.top = o, {
+        type: "blockquote",
+        raw: s[0],
+        tokens: u,
+        text: i
+      };
+    }
+  }
+  list(r) {
+    let s = this.rules.block.list.exec(r);
+    if (s) {
+      let i = s[1].trim();
+      const o = i.length > 1, u = {
+        type: "list",
+        raw: "",
+        ordered: o,
+        start: o ? +i.slice(0, -1) : "",
+        loose: !1,
+        items: []
+      };
+      i = o ? `\\d{1,9}\\${i.slice(-1)}` : `\\${i}`, this.options.pedantic && (i = o ? i : "[*+-]");
+      const f = new RegExp(`^( {0,3}${i})((?:[	 ][^\\n]*)?(?:\\n|$))`);
+      let p = "", g = "", y = !1;
+      for (; r; ) {
+        let D = !1;
+        if (!(s = f.exec(r)) || this.rules.block.hr.test(r))
+          break;
+        p = s[0], r = r.substring(p.length);
+        let T = s[2].split(`
+`, 1)[0].replace(/^\t+/, (R) => " ".repeat(3 * R.length)), P = r.split(`
+`, 1)[0], U = 0;
+        this.options.pedantic ? (U = 2, g = T.trimStart()) : (U = s[2].search(/[^ ]/), U = U > 4 ? 1 : U, g = T.slice(U), U += s[1].length);
+        let K = !1;
+        if (!T && /^ *$/.test(P) && (p += P + `
+`, r = r.substring(P.length + 1), D = !0), !D) {
+          const R = new RegExp(`^ {0,${Math.min(3, U - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ 	][^\\n]*)?(?:\\n|$))`), N = new RegExp(`^ {0,${Math.min(3, U - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), S = new RegExp(`^ {0,${Math.min(3, U - 1)}}(?:\`\`\`|~~~)`), M = new RegExp(`^ {0,${Math.min(3, U - 1)}}#`);
+          for (; r; ) {
+            const L = r.split(`
+`, 1)[0];
+            if (P = L, this.options.pedantic && (P = P.replace(/^ {1,4}(?=( {4})*[^ ])/g, "  ")), S.test(P) || M.test(P) || R.test(P) || N.test(r))
+              break;
+            if (P.search(/[^ ]/) >= U || !P.trim())
+              g += `
+` + P.slice(U);
+            else {
+              if (K || T.search(/[^ ]/) >= 4 || S.test(T) || M.test(T) || N.test(T))
+                break;
+              g += `
+` + P;
+            }
+            !K && !P.trim() && (K = !0), p += L + `
+`, r = r.substring(L.length + 1), T = P.slice(U);
+          }
+        }
+        u.loose || (y ? u.loose = !0 : /\n *\n *$/.test(p) && (y = !0));
+        let ee = null, Z;
+        this.options.gfm && (ee = /^\[[ xX]\] /.exec(g), ee && (Z = ee[0] !== "[ ] ", g = g.replace(/^\[[ xX]\] +/, ""))), u.items.push({
+          type: "list_item",
+          raw: p,
+          task: !!ee,
+          checked: Z,
+          loose: !1,
+          text: g,
+          tokens: []
+        }), u.raw += p;
+      }
+      u.items[u.items.length - 1].raw = p.trimEnd(), u.items[u.items.length - 1].text = g.trimEnd(), u.raw = u.raw.trimEnd();
+      for (let D = 0; D < u.items.length; D++)
+        if (this.lexer.state.top = !1, u.items[D].tokens = this.lexer.blockTokens(u.items[D].text, []), !u.loose) {
+          const T = u.items[D].tokens.filter((U) => U.type === "space"), P = T.length > 0 && T.some((U) => /\n.*\n/.test(U.raw));
+          u.loose = P;
+        }
+      if (u.loose)
+        for (let D = 0; D < u.items.length; D++)
+          u.items[D].loose = !0;
+      return u;
+    }
+  }
+  html(r) {
+    const s = this.rules.block.html.exec(r);
+    if (s)
+      return {
+        type: "html",
+        block: !0,
+        raw: s[0],
+        pre: s[1] === "pre" || s[1] === "script" || s[1] === "style",
+        text: s[0]
+      };
+  }
+  def(r) {
+    const s = this.rules.block.def.exec(r);
+    if (s) {
+      const i = s[1].toLowerCase().replace(/\s+/g, " "), o = s[2] ? s[2].replace(/^<(.*)>$/, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", u = s[3] ? s[3].substring(1, s[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : s[3];
+      return {
+        type: "def",
+        tag: i,
+        raw: s[0],
+        href: o,
+        title: u
+      };
+    }
+  }
+  table(r) {
+    const s = this.rules.block.table.exec(r);
+    if (!s || !/[:|]/.test(s[2]))
+      return;
+    const i = Gl(s[1]), o = s[2].replace(/^\||\| *$/g, "").split("|"), u = s[3] && s[3].trim() ? s[3].replace(/\n[ \t]*$/, "").split(`
+`) : [], f = {
+      type: "table",
+      raw: s[0],
+      header: [],
+      align: [],
+      rows: []
+    };
+    if (i.length === o.length) {
+      for (const p of o)
+        /^ *-+: *$/.test(p) ? f.align.push("right") : /^ *:-+: *$/.test(p) ? f.align.push("center") : /^ *:-+ *$/.test(p) ? f.align.push("left") : f.align.push(null);
+      for (const p of i)
+        f.header.push({
+          text: p,
+          tokens: this.lexer.inline(p)
+        });
+      for (const p of u)
+        f.rows.push(Gl(p, f.header.length).map((g) => ({
+          text: g,
+          tokens: this.lexer.inline(g)
+        })));
+      return f;
+    }
+  }
+  lheading(r) {
+    const s = this.rules.block.lheading.exec(r);
+    if (s)
+      return {
+        type: "heading",
+        raw: s[0],
+        depth: s[2].charAt(0) === "=" ? 1 : 2,
+        text: s[1],
+        tokens: this.lexer.inline(s[1])
+      };
+  }
+  paragraph(r) {
+    const s = this.rules.block.paragraph.exec(r);
+    if (s) {
+      const i = s[1].charAt(s[1].length - 1) === `
+` ? s[1].slice(0, -1) : s[1];
+      return {
+        type: "paragraph",
+        raw: s[0],
+        text: i,
+        tokens: this.lexer.inline(i)
+      };
+    }
+  }
+  text(r) {
+    const s = this.rules.block.text.exec(r);
+    if (s)
+      return {
+        type: "text",
+        raw: s[0],
+        text: s[0],
+        tokens: this.lexer.inline(s[0])
+      };
+  }
+  escape(r) {
+    const s = this.rules.inline.escape.exec(r);
+    if (s)
+      return {
+        type: "escape",
+        raw: s[0],
+        text: kt(s[1])
+      };
+  }
+  tag(r) {
+    const s = this.rules.inline.tag.exec(r);
+    if (s)
+      return !this.lexer.state.inLink && /^<a /i.test(s[0]) ? this.lexer.state.inLink = !0 : this.lexer.state.inLink && /^<\/a>/i.test(s[0]) && (this.lexer.state.inLink = !1), !this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(s[0]) ? this.lexer.state.inRawBlock = !0 : this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(s[0]) && (this.lexer.state.inRawBlock = !1), {
+        type: "html",
+        raw: s[0],
+        inLink: this.lexer.state.inLink,
+        inRawBlock: this.lexer.state.inRawBlock,
+        block: !1,
+        text: s[0]
+      };
+  }
+  link(r) {
+    const s = this.rules.inline.link.exec(r);
+    if (s) {
+      const i = s[2].trim();
+      if (!this.options.pedantic && /^</.test(i)) {
+        if (!/>$/.test(i))
+          return;
+        const f = cr(i.slice(0, -1), "\\");
+        if ((i.length - f.length) % 2 === 0)
+          return;
+      } else {
+        const f = th(s[2], "()");
+        if (f > -1) {
+          const g = (s[0].indexOf("!") === 0 ? 5 : 4) + s[1].length + f;
+          s[2] = s[2].substring(0, f), s[0] = s[0].substring(0, g).trim(), s[3] = "";
+        }
+      }
+      let o = s[2], u = "";
+      if (this.options.pedantic) {
+        const f = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(o);
+        f && (o = f[1], u = f[3]);
+      } else
+        u = s[3] ? s[3].slice(1, -1) : "";
+      return o = o.trim(), /^</.test(o) && (this.options.pedantic && !/>$/.test(i) ? o = o.slice(1) : o = o.slice(1, -1)), Vl(s, {
+        href: o && o.replace(this.rules.inline.anyPunctuation, "$1"),
+        title: u && u.replace(this.rules.inline.anyPunctuation, "$1")
+      }, s[0], this.lexer);
+    }
+  }
+  reflink(r, s) {
+    let i;
+    if ((i = this.rules.inline.reflink.exec(r)) || (i = this.rules.inline.nolink.exec(r))) {
+      const o = (i[2] || i[1]).replace(/\s+/g, " "), u = s[o.toLowerCase()];
+      if (!u) {
+        const f = i[0].charAt(0);
+        return {
+          type: "text",
+          raw: f,
+          text: f
+        };
+      }
+      return Vl(i, u, i[0], this.lexer);
+    }
+  }
+  emStrong(r, s, i = "") {
+    let o = this.rules.inline.emStrongLDelim.exec(r);
+    if (!o || o[3] && i.match(/[\p{L}\p{N}]/u))
+      return;
+    if (!(o[1] || o[2] || "") || !i || this.rules.inline.punctuation.exec(i)) {
+      const f = [...o[0]].length - 1;
+      let p, g, y = f, D = 0;
+      const T = o[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
+      for (T.lastIndex = 0, s = s.slice(-1 * r.length + f); (o = T.exec(s)) != null; ) {
+        if (p = o[1] || o[2] || o[3] || o[4] || o[5] || o[6], !p)
+          continue;
+        if (g = [...p].length, o[3] || o[4]) {
+          y += g;
+          continue;
+        } else if ((o[5] || o[6]) && f % 3 && !((f + g) % 3)) {
+          D += g;
+          continue;
+        }
+        if (y -= g, y > 0)
+          continue;
+        g = Math.min(g, g + y + D);
+        const P = [...o[0]][0].length, U = r.slice(0, f + o.index + P + g);
+        if (Math.min(f, g) % 2) {
+          const ee = U.slice(1, -1);
+          return {
+            type: "em",
+            raw: U,
+            text: ee,
+            tokens: this.lexer.inlineTokens(ee)
+          };
+        }
+        const K = U.slice(2, -2);
+        return {
+          type: "strong",
+          raw: U,
+          text: K,
+          tokens: this.lexer.inlineTokens(K)
+        };
+      }
+    }
+  }
+  codespan(r) {
+    const s = this.rules.inline.code.exec(r);
+    if (s) {
+      let i = s[2].replace(/\n/g, " ");
+      const o = /[^ ]/.test(i), u = /^ /.test(i) && / $/.test(i);
+      return o && u && (i = i.substring(1, i.length - 1)), i = kt(i, !0), {
+        type: "codespan",
+        raw: s[0],
+        text: i
+      };
+    }
+  }
+  br(r) {
+    const s = this.rules.inline.br.exec(r);
+    if (s)
+      return {
+        type: "br",
+        raw: s[0]
+      };
+  }
+  del(r) {
+    const s = this.rules.inline.del.exec(r);
+    if (s)
+      return {
+        type: "del",
+        raw: s[0],
+        text: s[2],
+        tokens: this.lexer.inlineTokens(s[2])
+      };
+  }
+  autolink(r) {
+    const s = this.rules.inline.autolink.exec(r);
+    if (s) {
+      let i, o;
+      return s[2] === "@" ? (i = kt(s[1]), o = "mailto:" + i) : (i = kt(s[1]), o = i), {
+        type: "link",
+        raw: s[0],
+        text: i,
+        href: o,
+        tokens: [
+          {
+            type: "text",
+            raw: i,
+            text: i
+          }
+        ]
+      };
+    }
+  }
+  url(r) {
+    var i;
+    let s;
+    if (s = this.rules.inline.url.exec(r)) {
+      let o, u;
+      if (s[2] === "@")
+        o = kt(s[0]), u = "mailto:" + o;
+      else {
+        let f;
+        do
+          f = s[0], s[0] = ((i = this.rules.inline._backpedal.exec(s[0])) == null ? void 0 : i[0]) ?? "";
+        while (f !== s[0]);
+        o = kt(s[0]), s[1] === "www." ? u = "http://" + s[0] : u = s[0];
+      }
+      return {
+        type: "link",
+        raw: s[0],
+        text: o,
+        href: u,
+        tokens: [
+          {
+            type: "text",
+            raw: o,
+            text: o
+          }
+        ]
+      };
+    }
+  }
+  inlineText(r) {
+    const s = this.rules.inline.text.exec(r);
+    if (s) {
+      let i;
+      return this.lexer.state.inRawBlock ? i = s[0] : i = kt(s[0]), {
+        type: "text",
+        raw: s[0],
+        text: i
+      };
+    }
+  }
+}
+const rh = /^(?: *(?:\n|$))+/, sh = /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/, ih = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, Bn = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, lh = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, xo = /(?:[*+-]|\d{1,9}[.)])/, Do = ze(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g, xo).replace(/blockCode/g, / {4}/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).getRegex(), Us = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/, ah = /^[^\n]+/, Gs = /(?!\s*\])(?:\\.|[^\[\]\\])+/, oh = ze(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label", Gs).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), uh = ze(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, xo).getRegex(), Ar = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", Vs = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, ch = ze("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))", "i").replace("comment", Vs).replace("tag", Ar).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), vo = ze(Us).replace("hr", Bn).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Ar).getRegex(), hh = ze(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", vo).getRegex(), Ws = {
+  blockquote: hh,
+  code: sh,
+  def: oh,
+  fences: ih,
+  heading: lh,
+  hr: Bn,
+  html: ch,
+  lheading: Do,
+  list: uh,
+  newline: rh,
+  paragraph: vo,
+  table: Tn,
+  text: ah
+}, Wl = ze("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", Bn).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", " {4}[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Ar).getRegex(), fh = {
+  ...Ws,
+  table: Wl,
+  paragraph: ze(Us).replace("hr", Bn).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", Wl).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", Ar).getRegex()
+}, dh = {
+  ...Ws,
+  html: ze(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", Vs).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
+  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
+  heading: /^(#{1,6})(.*)(?:\n+|$)/,
+  fences: Tn,
+  // fences not supported
+  lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
+  paragraph: ze(Us).replace("hr", Bn).replace("heading", ` *#{1,6} *[^
+]`).replace("lheading", Do).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex()
+}, Ao = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, mh = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, So = /^( {2,}|\\)\n(?!\s*$)/, ph = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, Nn = "\\p{P}\\p{S}", gh = ze(/^((?![*_])[\spunctuation])/, "u").replace(/punctuation/g, Nn).getRegex(), bh = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g, wh = ze(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/, "u").replace(/punct/g, Nn).getRegex(), yh = ze("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])", "gu").replace(/punct/g, Nn).getRegex(), _h = ze("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])", "gu").replace(/punct/g, Nn).getRegex(), kh = ze(/\\([punct])/, "gu").replace(/punct/g, Nn).getRegex(), xh = ze(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), Dh = ze(Vs).replace("(?:-->|$)", "-->").getRegex(), vh = ze("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Dh).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), kr = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/, Ah = ze(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label", kr).replace("href", /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), Fo = ze(/^!?\[(label)\]\[(ref)\]/).replace("label", kr).replace("ref", Gs).getRegex(), Eo = ze(/^!?\[(ref)\](?:\[\])?/).replace("ref", Gs).getRegex(), Sh = ze("reflink|nolink(?!\\()", "g").replace("reflink", Fo).replace("nolink", Eo).getRegex(), js = {
+  _backpedal: Tn,
+  // only used for GFM url
+  anyPunctuation: kh,
+  autolink: xh,
+  blockSkip: bh,
+  br: So,
+  code: mh,
+  del: Tn,
+  emStrongLDelim: wh,
+  emStrongRDelimAst: yh,
+  emStrongRDelimUnd: _h,
+  escape: Ao,
+  link: Ah,
+  nolink: Eo,
+  punctuation: gh,
+  reflink: Fo,
+  reflinkSearch: Sh,
+  tag: vh,
+  text: ph,
+  url: Tn
+}, Fh = {
+  ...js,
+  link: ze(/^!?\[(label)\]\((.*?)\)/).replace("label", kr).getRegex(),
+  reflink: ze(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", kr).getRegex()
+}, Ls = {
+  ...js,
+  escape: ze(Ao).replace("])", "~|])").getRegex(),
+  url: ze(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/, "i").replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),
+  _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
+  del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
+  text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
+}, Eh = {
+  ...Ls,
+  br: ze(So).replace("{2,}", "*").getRegex(),
+  text: ze(Ls.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
+}, hr = {
+  normal: Ws,
+  gfm: fh,
+  pedantic: dh
+}, En = {
+  normal: js,
+  gfm: Ls,
+  breaks: Eh,
+  pedantic: Fh
+};
+class n0 {
+  constructor(r) {
+    Ue(this, "tokens");
+    Ue(this, "options");
+    Ue(this, "state");
+    Ue(this, "tokenizer");
+    Ue(this, "inlineQueue");
+    this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = r || j0, this.options.tokenizer = this.options.tokenizer || new _r(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = {
+      inLink: !1,
+      inRawBlock: !1,
+      top: !0
+    };
+    const s = {
+      block: hr.normal,
+      inline: En.normal
+    };
+    this.options.pedantic ? (s.block = hr.pedantic, s.inline = En.pedantic) : this.options.gfm && (s.block = hr.gfm, this.options.breaks ? s.inline = En.breaks : s.inline = En.gfm), this.tokenizer.rules = s;
+  }
+  /**
+   * Expose Rules
+   */
+  static get rules() {
+    return {
+      block: hr,
+      inline: En
+    };
+  }
+  /**
+   * Static Lex Method
+   */
+  static lex(r, s) {
+    return new n0(s).lex(r);
+  }
+  /**
+   * Static Lex Inline Method
+   */
+  static lexInline(r, s) {
+    return new n0(s).inlineTokens(r);
+  }
+  /**
+   * Preprocessing
+   */
+  lex(r) {
+    r = r.replace(/\r\n|\r/g, `
+`), this.blockTokens(r, this.tokens);
+    for (let s = 0; s < this.inlineQueue.length; s++) {
+      const i = this.inlineQueue[s];
+      this.inlineTokens(i.src, i.tokens);
+    }
+    return this.inlineQueue = [], this.tokens;
+  }
+  blockTokens(r, s = []) {
+    this.options.pedantic ? r = r.replace(/\t/g, "    ").replace(/^ +$/gm, "") : r = r.replace(/^( *)(\t+)/gm, (p, g, y) => g + "    ".repeat(y.length));
+    let i, o, u, f;
+    for (; r; )
+      if (!(this.options.extensions && this.options.extensions.block && this.options.extensions.block.some((p) => (i = p.call({ lexer: this }, r, s)) ? (r = r.substring(i.raw.length), s.push(i), !0) : !1))) {
+        if (i = this.tokenizer.space(r)) {
+          r = r.substring(i.raw.length), i.raw.length === 1 && s.length > 0 ? s[s.length - 1].raw += `
+` : s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.code(r)) {
+          r = r.substring(i.raw.length), o = s[s.length - 1], o && (o.type === "paragraph" || o.type === "text") ? (o.raw += `
+` + i.raw, o.text += `
+` + i.text, this.inlineQueue[this.inlineQueue.length - 1].src = o.text) : s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.fences(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.heading(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.hr(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.blockquote(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.list(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.html(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.def(r)) {
+          r = r.substring(i.raw.length), o = s[s.length - 1], o && (o.type === "paragraph" || o.type === "text") ? (o.raw += `
+` + i.raw, o.text += `
+` + i.raw, this.inlineQueue[this.inlineQueue.length - 1].src = o.text) : this.tokens.links[i.tag] || (this.tokens.links[i.tag] = {
+            href: i.href,
+            title: i.title
+          });
+          continue;
+        }
+        if (i = this.tokenizer.table(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.lheading(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (u = r, this.options.extensions && this.options.extensions.startBlock) {
+          let p = 1 / 0;
+          const g = r.slice(1);
+          let y;
+          this.options.extensions.startBlock.forEach((D) => {
+            y = D.call({ lexer: this }, g), typeof y == "number" && y >= 0 && (p = Math.min(p, y));
+          }), p < 1 / 0 && p >= 0 && (u = r.substring(0, p + 1));
+        }
+        if (this.state.top && (i = this.tokenizer.paragraph(u))) {
+          o = s[s.length - 1], f && o.type === "paragraph" ? (o.raw += `
+` + i.raw, o.text += `
+` + i.text, this.inlineQueue.pop(), this.inlineQueue[this.inlineQueue.length - 1].src = o.text) : s.push(i), f = u.length !== r.length, r = r.substring(i.raw.length);
+          continue;
+        }
+        if (i = this.tokenizer.text(r)) {
+          r = r.substring(i.raw.length), o = s[s.length - 1], o && o.type === "text" ? (o.raw += `
+` + i.raw, o.text += `
+` + i.text, this.inlineQueue.pop(), this.inlineQueue[this.inlineQueue.length - 1].src = o.text) : s.push(i);
+          continue;
+        }
+        if (r) {
+          const p = "Infinite loop on byte: " + r.charCodeAt(0);
+          if (this.options.silent) {
+            console.error(p);
+            break;
+          } else
+            throw new Error(p);
+        }
+      }
+    return this.state.top = !0, s;
+  }
+  inline(r, s = []) {
+    return this.inlineQueue.push({ src: r, tokens: s }), s;
+  }
+  /**
+   * Lexing/Compiling
+   */
+  inlineTokens(r, s = []) {
+    let i, o, u, f = r, p, g, y;
+    if (this.tokens.links) {
+      const D = Object.keys(this.tokens.links);
+      if (D.length > 0)
+        for (; (p = this.tokenizer.rules.inline.reflinkSearch.exec(f)) != null; )
+          D.includes(p[0].slice(p[0].lastIndexOf("[") + 1, -1)) && (f = f.slice(0, p.index) + "[" + "a".repeat(p[0].length - 2) + "]" + f.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
+    }
+    for (; (p = this.tokenizer.rules.inline.blockSkip.exec(f)) != null; )
+      f = f.slice(0, p.index) + "[" + "a".repeat(p[0].length - 2) + "]" + f.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
+    for (; (p = this.tokenizer.rules.inline.anyPunctuation.exec(f)) != null; )
+      f = f.slice(0, p.index) + "++" + f.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
+    for (; r; )
+      if (g || (y = ""), g = !1, !(this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some((D) => (i = D.call({ lexer: this }, r, s)) ? (r = r.substring(i.raw.length), s.push(i), !0) : !1))) {
+        if (i = this.tokenizer.escape(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.tag(r)) {
+          r = r.substring(i.raw.length), o = s[s.length - 1], o && i.type === "text" && o.type === "text" ? (o.raw += i.raw, o.text += i.text) : s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.link(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.reflink(r, this.tokens.links)) {
+          r = r.substring(i.raw.length), o = s[s.length - 1], o && i.type === "text" && o.type === "text" ? (o.raw += i.raw, o.text += i.text) : s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.emStrong(r, f, y)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.codespan(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.br(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.del(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (i = this.tokenizer.autolink(r)) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (!this.state.inLink && (i = this.tokenizer.url(r))) {
+          r = r.substring(i.raw.length), s.push(i);
+          continue;
+        }
+        if (u = r, this.options.extensions && this.options.extensions.startInline) {
+          let D = 1 / 0;
+          const T = r.slice(1);
+          let P;
+          this.options.extensions.startInline.forEach((U) => {
+            P = U.call({ lexer: this }, T), typeof P == "number" && P >= 0 && (D = Math.min(D, P));
+          }), D < 1 / 0 && D >= 0 && (u = r.substring(0, D + 1));
+        }
+        if (i = this.tokenizer.inlineText(u)) {
+          r = r.substring(i.raw.length), i.raw.slice(-1) !== "_" && (y = i.raw.slice(-1)), g = !0, o = s[s.length - 1], o && o.type === "text" ? (o.raw += i.raw, o.text += i.text) : s.push(i);
+          continue;
+        }
+        if (r) {
+          const D = "Infinite loop on byte: " + r.charCodeAt(0);
+          if (this.options.silent) {
+            console.error(D);
+            break;
+          } else
+            throw new Error(D);
+        }
+      }
+    return s;
+  }
+}
+class xr {
+  constructor(r) {
+    Ue(this, "options");
+    this.options = r || j0;
+  }
+  code(r, s, i) {
+    var u;
+    const o = (u = (s || "").match(/^\S*/)) == null ? void 0 : u[0];
+    return r = r.replace(/\n$/, "") + `
+`, o ? '<pre><code class="language-' + kt(o) + '">' + (i ? r : kt(r, !0)) + `</code></pre>
+` : "<pre><code>" + (i ? r : kt(r, !0)) + `</code></pre>
+`;
+  }
+  blockquote(r) {
+    return `<blockquote>
+${r}</blockquote>
+`;
+  }
+  html(r, s) {
+    return r;
+  }
+  heading(r, s, i) {
+    return `<h${s}>${r}</h${s}>
+`;
+  }
+  hr() {
+    return `<hr>
+`;
+  }
+  list(r, s, i) {
+    const o = s ? "ol" : "ul", u = s && i !== 1 ? ' start="' + i + '"' : "";
+    return "<" + o + u + `>
+` + r + "</" + o + `>
+`;
+  }
+  listitem(r, s, i) {
+    return `<li>${r}</li>
+`;
+  }
+  checkbox(r) {
+    return "<input " + (r ? 'checked="" ' : "") + 'disabled="" type="checkbox">';
+  }
+  paragraph(r) {
+    return `<p>${r}</p>
+`;
+  }
+  table(r, s) {
+    return s && (s = `<tbody>${s}</tbody>`), `<table>
+<thead>
+` + r + `</thead>
+` + s + `</table>
+`;
+  }
+  tablerow(r) {
+    return `<tr>
+${r}</tr>
+`;
+  }
+  tablecell(r, s) {
+    const i = s.header ? "th" : "td";
+    return (s.align ? `<${i} align="${s.align}">` : `<${i}>`) + r + `</${i}>
+`;
+  }
+  /**
+   * span level renderer
+   */
+  strong(r) {
+    return `<strong>${r}</strong>`;
+  }
+  em(r) {
+    return `<em>${r}</em>`;
+  }
+  codespan(r) {
+    return `<code>${r}</code>`;
+  }
+  br() {
+    return "<br>";
+  }
+  del(r) {
+    return `<del>${r}</del>`;
+  }
+  link(r, s, i) {
+    const o = Ul(r);
+    if (o === null)
+      return i;
+    r = o;
+    let u = '<a href="' + r + '"';
+    return s && (u += ' title="' + s + '"'), u += ">" + i + "</a>", u;
+  }
+  image(r, s, i) {
+    const o = Ul(r);
+    if (o === null)
+      return i;
+    r = o;
+    let u = `<img src="${r}" alt="${i}"`;
+    return s && (u += ` title="${s}"`), u += ">", u;
+  }
+  text(r) {
+    return r;
+  }
+}
+class Xs {
+  // no need for block level renderers
+  strong(r) {
+    return r;
+  }
+  em(r) {
+    return r;
+  }
+  codespan(r) {
+    return r;
+  }
+  del(r) {
+    return r;
+  }
+  html(r) {
+    return r;
+  }
+  text(r) {
+    return r;
+  }
+  link(r, s, i) {
+    return "" + i;
+  }
+  image(r, s, i) {
+    return "" + i;
+  }
+  br() {
+    return "";
+  }
+}
+class r0 {
+  constructor(r) {
+    Ue(this, "options");
+    Ue(this, "renderer");
+    Ue(this, "textRenderer");
+    this.options = r || j0, this.options.renderer = this.options.renderer || new xr(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.textRenderer = new Xs();
+  }
+  /**
+   * Static Parse Method
+   */
+  static parse(r, s) {
+    return new r0(s).parse(r);
+  }
+  /**
+   * Static Parse Inline Method
+   */
+  static parseInline(r, s) {
+    return new r0(s).parseInline(r);
+  }
+  /**
+   * Parse Loop
+   */
+  parse(r, s = !0) {
+    let i = "";
+    for (let o = 0; o < r.length; o++) {
+      const u = r[o];
+      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[u.type]) {
+        const f = u, p = this.options.extensions.renderers[f.type].call({ parser: this }, f);
+        if (p !== !1 || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "paragraph", "text"].includes(f.type)) {
+          i += p || "";
+          continue;
+        }
+      }
+      switch (u.type) {
+        case "space":
+          continue;
+        case "hr": {
+          i += this.renderer.hr();
+          continue;
+        }
+        case "heading": {
+          const f = u;
+          i += this.renderer.heading(this.parseInline(f.tokens), f.depth, $4(this.parseInline(f.tokens, this.textRenderer)));
+          continue;
+        }
+        case "code": {
+          const f = u;
+          i += this.renderer.code(f.text, f.lang, !!f.escaped);
+          continue;
+        }
+        case "table": {
+          const f = u;
+          let p = "", g = "";
+          for (let D = 0; D < f.header.length; D++)
+            g += this.renderer.tablecell(this.parseInline(f.header[D].tokens), { header: !0, align: f.align[D] });
+          p += this.renderer.tablerow(g);
+          let y = "";
+          for (let D = 0; D < f.rows.length; D++) {
+            const T = f.rows[D];
+            g = "";
+            for (let P = 0; P < T.length; P++)
+              g += this.renderer.tablecell(this.parseInline(T[P].tokens), { header: !1, align: f.align[P] });
+            y += this.renderer.tablerow(g);
+          }
+          i += this.renderer.table(p, y);
+          continue;
+        }
+        case "blockquote": {
+          const f = u, p = this.parse(f.tokens);
+          i += this.renderer.blockquote(p);
+          continue;
+        }
+        case "list": {
+          const f = u, p = f.ordered, g = f.start, y = f.loose;
+          let D = "";
+          for (let T = 0; T < f.items.length; T++) {
+            const P = f.items[T], U = P.checked, K = P.task;
+            let ee = "";
+            if (P.task) {
+              const Z = this.renderer.checkbox(!!U);
+              y ? P.tokens.length > 0 && P.tokens[0].type === "paragraph" ? (P.tokens[0].text = Z + " " + P.tokens[0].text, P.tokens[0].tokens && P.tokens[0].tokens.length > 0 && P.tokens[0].tokens[0].type === "text" && (P.tokens[0].tokens[0].text = Z + " " + P.tokens[0].tokens[0].text)) : P.tokens.unshift({
+                type: "text",
+                text: Z + " "
+              }) : ee += Z + " ";
+            }
+            ee += this.parse(P.tokens, y), D += this.renderer.listitem(ee, K, !!U);
+          }
+          i += this.renderer.list(D, p, g);
+          continue;
+        }
+        case "html": {
+          const f = u;
+          i += this.renderer.html(f.text, f.block);
+          continue;
+        }
+        case "paragraph": {
+          const f = u;
+          i += this.renderer.paragraph(this.parseInline(f.tokens));
+          continue;
+        }
+        case "text": {
+          let f = u, p = f.tokens ? this.parseInline(f.tokens) : f.text;
+          for (; o + 1 < r.length && r[o + 1].type === "text"; )
+            f = r[++o], p += `
+` + (f.tokens ? this.parseInline(f.tokens) : f.text);
+          i += s ? this.renderer.paragraph(p) : p;
+          continue;
+        }
+        default: {
+          const f = 'Token with "' + u.type + '" type was not found.';
+          if (this.options.silent)
+            return console.error(f), "";
+          throw new Error(f);
+        }
+      }
+    }
+    return i;
+  }
+  /**
+   * Parse Inline Tokens
+   */
+  parseInline(r, s) {
+    s = s || this.renderer;
+    let i = "";
+    for (let o = 0; o < r.length; o++) {
+      const u = r[o];
+      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[u.type]) {
+        const f = this.options.extensions.renderers[u.type].call({ parser: this }, u);
+        if (f !== !1 || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(u.type)) {
+          i += f || "";
+          continue;
+        }
+      }
+      switch (u.type) {
+        case "escape": {
+          const f = u;
+          i += s.text(f.text);
+          break;
+        }
+        case "html": {
+          const f = u;
+          i += s.html(f.text);
+          break;
+        }
+        case "link": {
+          const f = u;
+          i += s.link(f.href, f.title, this.parseInline(f.tokens, s));
+          break;
+        }
+        case "image": {
+          const f = u;
+          i += s.image(f.href, f.title, f.text);
+          break;
+        }
+        case "strong": {
+          const f = u;
+          i += s.strong(this.parseInline(f.tokens, s));
+          break;
+        }
+        case "em": {
+          const f = u;
+          i += s.em(this.parseInline(f.tokens, s));
+          break;
+        }
+        case "codespan": {
+          const f = u;
+          i += s.codespan(f.text);
+          break;
+        }
+        case "br": {
+          i += s.br();
+          break;
+        }
+        case "del": {
+          const f = u;
+          i += s.del(this.parseInline(f.tokens, s));
+          break;
+        }
+        case "text": {
+          const f = u;
+          i += s.text(f.text);
+          break;
+        }
+        default: {
+          const f = 'Token with "' + u.type + '" type was not found.';
+          if (this.options.silent)
+            return console.error(f), "";
+          throw new Error(f);
+        }
+      }
+    }
+    return i;
+  }
+}
+class Mn {
+  constructor(r) {
+    Ue(this, "options");
+    this.options = r || j0;
+  }
+  /**
+   * Process markdown before marked
+   */
+  preprocess(r) {
+    return r;
+  }
+  /**
+   * Process HTML after marked is finished
+   */
+  postprocess(r) {
+    return r;
+  }
+  /**
+   * Process all tokens before walk tokens
+   */
+  processAllTokens(r) {
+    return r;
+  }
+}
+Ue(Mn, "passThroughHooks", /* @__PURE__ */ new Set([
+  "preprocess",
+  "postprocess",
+  "processAllTokens"
+]));
+var zn, Os, vr, To;
+class Co {
+  constructor(...r) {
+    cs(this, zn);
+    cs(this, vr);
+    Ue(this, "defaults", Hs());
+    Ue(this, "options", this.setOptions);
+    Ue(this, "parse", rr(this, zn, Os).call(this, n0.lex, r0.parse));
+    Ue(this, "parseInline", rr(this, zn, Os).call(this, n0.lexInline, r0.parseInline));
+    Ue(this, "Parser", r0);
+    Ue(this, "Renderer", xr);
+    Ue(this, "TextRenderer", Xs);
+    Ue(this, "Lexer", n0);
+    Ue(this, "Tokenizer", _r);
+    Ue(this, "Hooks", Mn);
+    this.use(...r);
+  }
+  /**
+   * Run callback for every token
+   */
+  walkTokens(r, s) {
+    var o, u;
+    let i = [];
+    for (const f of r)
+      switch (i = i.concat(s.call(this, f)), f.type) {
+        case "table": {
+          const p = f;
+          for (const g of p.header)
+            i = i.concat(this.walkTokens(g.tokens, s));
+          for (const g of p.rows)
+            for (const y of g)
+              i = i.concat(this.walkTokens(y.tokens, s));
+          break;
+        }
+        case "list": {
+          const p = f;
+          i = i.concat(this.walkTokens(p.items, s));
+          break;
+        }
+        default: {
+          const p = f;
+          (u = (o = this.defaults.extensions) == null ? void 0 : o.childTokens) != null && u[p.type] ? this.defaults.extensions.childTokens[p.type].forEach((g) => {
+            const y = p[g].flat(1 / 0);
+            i = i.concat(this.walkTokens(y, s));
+          }) : p.tokens && (i = i.concat(this.walkTokens(p.tokens, s)));
+        }
+      }
+    return i;
+  }
+  use(...r) {
+    const s = this.defaults.extensions || { renderers: {}, childTokens: {} };
+    return r.forEach((i) => {
+      const o = { ...i };
+      if (o.async = this.defaults.async || o.async || !1, i.extensions && (i.extensions.forEach((u) => {
+        if (!u.name)
+          throw new Error("extension name required");
+        if ("renderer" in u) {
+          const f = s.renderers[u.name];
+          f ? s.renderers[u.name] = function(...p) {
+            let g = u.renderer.apply(this, p);
+            return g === !1 && (g = f.apply(this, p)), g;
+          } : s.renderers[u.name] = u.renderer;
+        }
+        if ("tokenizer" in u) {
+          if (!u.level || u.level !== "block" && u.level !== "inline")
+            throw new Error("extension level must be 'block' or 'inline'");
+          const f = s[u.level];
+          f ? f.unshift(u.tokenizer) : s[u.level] = [u.tokenizer], u.start && (u.level === "block" ? s.startBlock ? s.startBlock.push(u.start) : s.startBlock = [u.start] : u.level === "inline" && (s.startInline ? s.startInline.push(u.start) : s.startInline = [u.start]));
+        }
+        "childTokens" in u && u.childTokens && (s.childTokens[u.name] = u.childTokens);
+      }), o.extensions = s), i.renderer) {
+        const u = this.defaults.renderer || new xr(this.defaults);
+        for (const f in i.renderer) {
+          if (!(f in u))
+            throw new Error(`renderer '${f}' does not exist`);
+          if (f === "options")
+            continue;
+          const p = f, g = i.renderer[p], y = u[p];
+          u[p] = (...D) => {
+            let T = g.apply(u, D);
+            return T === !1 && (T = y.apply(u, D)), T || "";
+          };
+        }
+        o.renderer = u;
+      }
+      if (i.tokenizer) {
+        const u = this.defaults.tokenizer || new _r(this.defaults);
+        for (const f in i.tokenizer) {
+          if (!(f in u))
+            throw new Error(`tokenizer '${f}' does not exist`);
+          if (["options", "rules", "lexer"].includes(f))
+            continue;
+          const p = f, g = i.tokenizer[p], y = u[p];
+          u[p] = (...D) => {
+            let T = g.apply(u, D);
+            return T === !1 && (T = y.apply(u, D)), T;
+          };
+        }
+        o.tokenizer = u;
+      }
+      if (i.hooks) {
+        const u = this.defaults.hooks || new Mn();
+        for (const f in i.hooks) {
+          if (!(f in u))
+            throw new Error(`hook '${f}' does not exist`);
+          if (f === "options")
+            continue;
+          const p = f, g = i.hooks[p], y = u[p];
+          Mn.passThroughHooks.has(f) ? u[p] = (D) => {
+            if (this.defaults.async)
+              return Promise.resolve(g.call(u, D)).then((P) => y.call(u, P));
+            const T = g.call(u, D);
+            return y.call(u, T);
+          } : u[p] = (...D) => {
+            let T = g.apply(u, D);
+            return T === !1 && (T = y.apply(u, D)), T;
+          };
+        }
+        o.hooks = u;
+      }
+      if (i.walkTokens) {
+        const u = this.defaults.walkTokens, f = i.walkTokens;
+        o.walkTokens = function(p) {
+          let g = [];
+          return g.push(f.call(this, p)), u && (g = g.concat(u.call(this, p))), g;
+        };
+      }
+      this.defaults = { ...this.defaults, ...o };
+    }), this;
+  }
+  setOptions(r) {
+    return this.defaults = { ...this.defaults, ...r }, this;
+  }
+  lexer(r, s) {
+    return n0.lex(r, s ?? this.defaults);
+  }
+  parser(r, s) {
+    return r0.parse(r, s ?? this.defaults);
+  }
+}
+zn = new WeakSet(), Os = function(r, s) {
+  return (i, o) => {
+    const u = { ...o }, f = { ...this.defaults, ...u };
+    this.defaults.async === !0 && u.async === !1 && (f.silent || console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."), f.async = !0);
+    const p = rr(this, vr, To).call(this, !!f.silent, !!f.async);
+    if (typeof i > "u" || i === null)
+      return p(new Error("marked(): input parameter is undefined or null"));
+    if (typeof i != "string")
+      return p(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(i) + ", string expected"));
+    if (f.hooks && (f.hooks.options = f), f.async)
+      return Promise.resolve(f.hooks ? f.hooks.preprocess(i) : i).then((g) => r(g, f)).then((g) => f.hooks ? f.hooks.processAllTokens(g) : g).then((g) => f.walkTokens ? Promise.all(this.walkTokens(g, f.walkTokens)).then(() => g) : g).then((g) => s(g, f)).then((g) => f.hooks ? f.hooks.postprocess(g) : g).catch(p);
+    try {
+      f.hooks && (i = f.hooks.preprocess(i));
+      let g = r(i, f);
+      f.hooks && (g = f.hooks.processAllTokens(g)), f.walkTokens && this.walkTokens(g, f.walkTokens);
+      let y = s(g, f);
+      return f.hooks && (y = f.hooks.postprocess(y)), y;
+    } catch (g) {
+      return p(g);
+    }
+  };
+}, vr = new WeakSet(), To = function(r, s) {
+  return (i) => {
+    if (i.message += `
+Please report this to https://github.com/markedjs/marked.`, r) {
+      const o = "<p>An error occurred:</p><pre>" + kt(i.message + "", !0) + "</pre>";
+      return s ? Promise.resolve(o) : o;
+    }
+    if (s)
+      return Promise.reject(i);
+    throw i;
+  };
+};
+const W0 = new Co();
+function Me(a, r) {
+  return W0.parse(a, r);
+}
+Me.options = Me.setOptions = function(a) {
+  return W0.setOptions(a), Me.defaults = W0.defaults, yo(Me.defaults), Me;
+};
+Me.getDefaults = Hs;
+Me.defaults = j0;
+Me.use = function(...a) {
+  return W0.use(...a), Me.defaults = W0.defaults, yo(Me.defaults), Me;
+};
+Me.walkTokens = function(a, r) {
+  return W0.walkTokens(a, r);
+};
+Me.parseInline = W0.parseInline;
+Me.Parser = r0;
+Me.parser = r0.parse;
+Me.Renderer = xr;
+Me.TextRenderer = Xs;
+Me.Lexer = n0;
+Me.lexer = n0.lex;
+Me.Tokenizer = _r;
+Me.Hooks = Mn;
+Me.parse = Me;
+Me.options;
+Me.setOptions;
+Me.use;
+Me.walkTokens;
+Me.parseInline;
+r0.parse;
+n0.lex;
+function Ch(a) {
+  if (typeof a == "function" && (a = {
+    highlight: a
+  }), !a || typeof a.highlight != "function")
+    throw new Error("Must provide highlight function");
+  return typeof a.langPrefix != "string" && (a.langPrefix = "language-"), {
+    async: !!a.async,
+    walkTokens(r) {
+      if (r.type !== "code")
+        return;
+      const s = jl(r.lang);
+      if (a.async)
+        return Promise.resolve(a.highlight(r.text, s, r.lang || "")).then(Xl(r));
+      const i = a.highlight(r.text, s, r.lang || "");
+      if (i instanceof Promise)
+        throw new Error("markedHighlight is not set to async but the highlight function is async. Set the async option to true on markedHighlight to await the async highlight function.");
+      Xl(r)(i);
+    },
+    renderer: {
+      code(r, s, i) {
+        const o = jl(s), u = o ? ` class="${a.langPrefix}${Zl(o)}"` : "";
+        return r = r.replace(/\n$/, ""), `<pre><code${u}>${i ? r : Zl(r, !0)}
+</code></pre>`;
+      }
+    }
+  };
+}
+function jl(a) {
+  return (a || "").match(/\S*/)[0];
+}
+function Xl(a) {
+  return (r) => {
+    typeof r == "string" && r !== a.text && (a.escaped = !0, a.text = r);
+  };
+}
+const Mo = /[&<>"']/, Th = new RegExp(Mo.source, "g"), zo = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, Mh = new RegExp(zo.source, "g"), zh = {
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;",
+  '"': "&quot;",
+  "'": "&#39;"
+}, Yl = (a) => zh[a];
+function Zl(a, r) {
+  if (r) {
+    if (Mo.test(a))
+      return a.replace(Th, Yl);
+  } else if (zo.test(a))
+    return a.replace(Mh, Yl);
+  return a;
+}
+const Bh = /[\0-\x1F!-,\.\/:-@\[-\^`\{-\xA9\xAB-\xB4\xB6-\xB9\xBB-\xBF\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0378\u0379\u037E\u0380-\u0385\u0387\u038B\u038D\u03A2\u03F6\u0482\u0530\u0557\u0558\u055A-\u055F\u0589-\u0590\u05BE\u05C0\u05C3\u05C6\u05C8-\u05CF\u05EB-\u05EE\u05F3-\u060F\u061B-\u061F\u066A-\u066D\u06D4\u06DD\u06DE\u06E9\u06FD\u06FE\u0700-\u070F\u074B\u074C\u07B2-\u07BF\u07F6-\u07F9\u07FB\u07FC\u07FE\u07FF\u082E-\u083F\u085C-\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0964\u0965\u0970\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09F2-\u09FB\u09FD\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF0-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B70\u0B72-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BF0-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C7F\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D4F-\u0D53\u0D58-\u0D5E\u0D64\u0D65\u0D70-\u0D79\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF4-\u0E00\u0E3B-\u0E3F\u0E4F\u0E5A-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F01-\u0F17\u0F1A-\u0F1F\u0F2A-\u0F34\u0F36\u0F38\u0F3A-\u0F3D\u0F48\u0F6D-\u0F70\u0F85\u0F98\u0FBD-\u0FC5\u0FC7-\u0FFF\u104A-\u104F\u109E\u109F\u10C6\u10C8-\u10CC\u10CE\u10CF\u10FB\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u1360-\u137F\u1390-\u139F\u13F6\u13F7\u13FE-\u1400\u166D\u166E\u1680\u169B-\u169F\u16EB-\u16ED\u16F9-\u16FF\u170D\u1715-\u171F\u1735-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17D4-\u17D6\u17D8-\u17DB\u17DE\u17DF\u17EA-\u180A\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u1945\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DA-\u19FF\u1A1C-\u1A1F\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1AA6\u1AA8-\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B5A-\u1B6A\u1B74-\u1B7F\u1BF4-\u1BFF\u1C38-\u1C3F\u1C4A-\u1C4C\u1C7E\u1C7F\u1C89-\u1C8F\u1CBB\u1CBC\u1CC0-\u1CCF\u1CD3\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FBD\u1FBF-\u1FC1\u1FC5\u1FCD-\u1FCF\u1FD4\u1FD5\u1FDC-\u1FDF\u1FED-\u1FF1\u1FF5\u1FFD-\u203E\u2041-\u2053\u2055-\u2070\u2072-\u207E\u2080-\u208F\u209D-\u20CF\u20F1-\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F-\u215F\u2189-\u24B5\u24EA-\u2BFF\u2C2F\u2C5F\u2CE5-\u2CEA\u2CF4-\u2CFF\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D70-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E00-\u2E2E\u2E30-\u3004\u3008-\u3020\u3030\u3036\u3037\u303D-\u3040\u3097\u3098\u309B\u309C\u30A0\u30FB\u3100-\u3104\u3130\u318F-\u319F\u31C0-\u31EF\u3200-\u33FF\u4DC0-\u4DFF\u9FFD-\u9FFF\uA48D-\uA4CF\uA4FE\uA4FF\uA60D-\uA60F\uA62C-\uA63F\uA673\uA67E\uA6F2-\uA716\uA720\uA721\uA789\uA78A\uA7C0\uA7C1\uA7CB-\uA7F4\uA828-\uA82B\uA82D-\uA83F\uA874-\uA87F\uA8C6-\uA8CF\uA8DA-\uA8DF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA954-\uA95F\uA97D-\uA97F\uA9C1-\uA9CE\uA9DA-\uA9DF\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A-\uAA5F\uAA77-\uAA79\uAAC3-\uAADA\uAADE\uAADF\uAAF0\uAAF1\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB5B\uAB6A-\uAB6F\uABEB\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uE000-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB29\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBB2-\uFBD2\uFD3E-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFC-\uFDFF\uFE10-\uFE1F\uFE30-\uFE32\uFE35-\uFE4C\uFE50-\uFE6F\uFE75\uFEFD-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF3E\uFF40\uFF5B-\uFF65\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFFF]|\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDD3F\uDD75-\uDDFC\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEE1-\uDEFF\uDF20-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDF9F\uDFC4-\uDFC7\uDFD0\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56-\uDC5F\uDC77-\uDC7F\uDC9F-\uDCDF\uDCF3\uDCF6-\uDCFF\uDD16-\uDD1F\uDD3A-\uDD7F\uDDB8-\uDDBD\uDDC0-\uDDFF\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE40-\uDE5F\uDE7D-\uDE7F\uDE9D-\uDEBF\uDEC8\uDEE7-\uDEFF\uDF36-\uDF3F\uDF56-\uDF5F\uDF73-\uDF7F\uDF92-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCFF\uDD28-\uDD2F\uDD3A-\uDE7F\uDEAA\uDEAD-\uDEAF\uDEB2-\uDEFF\uDF1D-\uDF26\uDF28-\uDF2F\uDF51-\uDFAF\uDFC5-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC47-\uDC65\uDC70-\uDC7E\uDCBB-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD40-\uDD43\uDD48-\uDD4F\uDD74\uDD75\uDD77-\uDD7F\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDFF\uDE12\uDE38-\uDE3D\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEA9-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC4B-\uDC4F\uDC5A-\uDC5D\uDC62-\uDC7F\uDCC6\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDC1-\uDDD7\uDDDE-\uDDFF\uDE41-\uDE43\uDE45-\uDE4F\uDE5A-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF3A-\uDFFF]|\uD806[\uDC3B-\uDC9F\uDCEA-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD44-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE2\uDDE5-\uDDFF\uDE3F-\uDE46\uDE48-\uDE4F\uDE9A-\uDE9C\uDE9E-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC41-\uDC4F\uDC5A-\uDC71\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF7-\uDFAF\uDFB1-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83D\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDECF\uDEEE\uDEEF\uDEF5-\uDEFF\uDF37-\uDF3F\uDF44-\uDF4F\uDF5A-\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE80-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE2\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A-\uDC9C\uDC9F-\uDFFF]|\uD834[\uDC00-\uDD64\uDD6A-\uDD6C\uDD73-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDE41\uDE45-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3\uDFCC\uDFCD]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD4F-\uDEBF\uDEFA-\uDFFF]|\uD83A[\uDCC5-\uDCCF\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDFFF]|\uD83B[\uDC00-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDFFF]|\uD83C[\uDC00-\uDD2F\uDD4A-\uDD4F\uDD6A-\uDD6F\uDD8A-\uDFFF]|\uD83E[\uDC00-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]/g, Nh = Object.hasOwnProperty;
+class Bo {
+  /**
+   * Create a new slug class.
+   */
+  constructor() {
+    this.occurrences, this.reset();
+  }
+  /**
+   * Generate a unique slug.
+  *
+  * Tracks previously generated slugs: repeated calls with the same value
+  * will result in different slugs.
+  * Use the `slug` function to get same slugs.
+   *
+   * @param  {string} value
+   *   String of text to slugify
+   * @param  {boolean} [maintainCase=false]
+   *   Keep the current case, otherwise make all lowercase
+   * @return {string}
+   *   A unique slug string
+   */
+  slug(r, s) {
+    const i = this;
+    let o = Rh(r, s === !0);
+    const u = o;
+    for (; Nh.call(i.occurrences, o); )
+      i.occurrences[u]++, o = u + "-" + i.occurrences[u];
+    return i.occurrences[o] = 0, o;
+  }
+  /**
+   * Reset - Forget all previous slugs
+   *
+   * @return void
+   */
+  reset() {
+    this.occurrences = /* @__PURE__ */ Object.create(null);
+  }
+}
+function Rh(a, r) {
+  return typeof a != "string" ? "" : (r || (a = a.toLowerCase()), a.replace(Bh, "").replace(/ /g, "-"));
+}
+let Kl, Ql = [];
+function Ih({ prefix: a = "" } = {}) {
+  return {
+    headerIds: !1,
+    // prevent deprecation warning; remove this once headerIds option is removed
+    hooks: {
+      preprocess(r) {
+        return Ql = [], Kl = new Bo(), r;
+      }
+    },
+    renderer: {
+      heading(r, s, i) {
+        i = i.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi, "");
+        const o = `${a}${Kl.slug(i)}`, u = { level: s, text: r, id: o };
+        return Ql.push(u), `<h${s} id="${o}">${r}</h${s}>
+`;
+      }
+    }
+  };
+}
+var No = { exports: {} };
+(function(a) {
+  var r = typeof window < "u" ? window : typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope ? self : {};
+  /**
+   * Prism: Lightweight, robust, elegant syntax highlighting
+   *
+   * @license MIT <https://opensource.org/licenses/MIT>
+   * @author Lea Verou <https://lea.verou.me>
+   * @namespace
+   * @public
+   */
+  var s = function(i) {
+    var o = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i, u = 0, f = {}, p = {
+      /**
+       * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the
+       * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load
+       * additional languages or plugins yourself.
+       *
+       * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.
+       *
+       * You obviously have to change this value before the automatic highlighting started. To do this, you can add an
+       * empty Prism object into the global scope before loading the Prism script like this:
+       *
+       * ```js
+       * window.Prism = window.Prism || {};
+       * Prism.manual = true;
+       * // add a new <script> to load Prism's script
+       * ```
+       *
+       * @default false
+       * @type {boolean}
+       * @memberof Prism
+       * @public
+       */
+      manual: i.Prism && i.Prism.manual,
+      /**
+       * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses
+       * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your
+       * own worker, you don't want it to do this.
+       *
+       * By setting this value to `true`, Prism will not add its own listeners to the worker.
+       *
+       * You obviously have to change this value before Prism executes. To do this, you can add an
+       * empty Prism object into the global scope before loading the Prism script like this:
+       *
+       * ```js
+       * window.Prism = window.Prism || {};
+       * Prism.disableWorkerMessageHandler = true;
+       * // Load Prism's script
+       * ```
+       *
+       * @default false
+       * @type {boolean}
+       * @memberof Prism
+       * @public
+       */
+      disableWorkerMessageHandler: i.Prism && i.Prism.disableWorkerMessageHandler,
+      /**
+       * A namespace for utility methods.
+       *
+       * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may
+       * change or disappear at any time.
+       *
+       * @namespace
+       * @memberof Prism
+       */
+      util: {
+        encode: function N(S) {
+          return S instanceof g ? new g(S.type, N(S.content), S.alias) : Array.isArray(S) ? S.map(N) : S.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/\u00a0/g, " ");
+        },
+        /**
+         * Returns the name of the type of the given value.
+         *
+         * @param {any} o
+         * @returns {string}
+         * @example
+         * type(null)      === 'Null'
+         * type(undefined) === 'Undefined'
+         * type(123)       === 'Number'
+         * type('foo')     === 'String'
+         * type(true)      === 'Boolean'
+         * type([1, 2])    === 'Array'
+         * type({})        === 'Object'
+         * type(String)    === 'Function'
+         * type(/abc+/)    === 'RegExp'
+         */
+        type: function(N) {
+          return Object.prototype.toString.call(N).slice(8, -1);
+        },
+        /**
+         * Returns a unique number for the given object. Later calls will still return the same number.
+         *
+         * @param {Object} obj
+         * @returns {number}
+         */
+        objId: function(N) {
+          return N.__id || Object.defineProperty(N, "__id", { value: ++u }), N.__id;
+        },
+        /**
+         * Creates a deep clone of the given object.
+         *
+         * The main intended use of this function is to clone language definitions.
+         *
+         * @param {T} o
+         * @param {Record<number, any>} [visited]
+         * @returns {T}
+         * @template T
+         */
+        clone: function N(S, M) {
+          M = M || {};
+          var L, z;
+          switch (p.util.type(S)) {
+            case "Object":
+              if (z = p.util.objId(S), M[z])
+                return M[z];
+              L = /** @type {Record<string, any>} */
+              {}, M[z] = L;
+              for (var H in S)
+                S.hasOwnProperty(H) && (L[H] = N(S[H], M));
+              return (
+                /** @type {any} */
+                L
+              );
+            case "Array":
+              return z = p.util.objId(S), M[z] ? M[z] : (L = [], M[z] = L, /** @type {Array} */
+              /** @type {any} */
+              S.forEach(function(te, Q) {
+                L[Q] = N(te, M);
+              }), /** @type {any} */
+              L);
+            default:
+              return S;
+          }
+        },
+        /**
+         * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
+         *
+         * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
+         *
+         * @param {Element} element
+         * @returns {string}
+         */
+        getLanguage: function(N) {
+          for (; N; ) {
+            var S = o.exec(N.className);
+            if (S)
+              return S[1].toLowerCase();
+            N = N.parentElement;
+          }
+          return "none";
+        },
+        /**
+         * Sets the Prism `language-xxxx` class of the given element.
+         *
+         * @param {Element} element
+         * @param {string} language
+         * @returns {void}
+         */
+        setLanguage: function(N, S) {
+          N.className = N.className.replace(RegExp(o, "gi"), ""), N.classList.add("language-" + S);
+        },
+        /**
+         * Returns the script element that is currently executing.
+         *
+         * This does __not__ work for line script element.
+         *
+         * @returns {HTMLScriptElement | null}
+         */
+        currentScript: function() {
+          if (typeof document > "u")
+            return null;
+          if ("currentScript" in document && 1 < 2)
+            return (
+              /** @type {any} */
+              document.currentScript
+            );
+          try {
+            throw new Error();
+          } catch (L) {
+            var N = (/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(L.stack) || [])[1];
+            if (N) {
+              var S = document.getElementsByTagName("script");
+              for (var M in S)
+                if (S[M].src == N)
+                  return S[M];
+            }
+            return null;
+          }
+        },
+        /**
+         * Returns whether a given class is active for `element`.
+         *
+         * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated
+         * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the
+         * given class is just the given class with a `no-` prefix.
+         *
+         * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is
+         * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its
+         * ancestors have the given class or the negated version of it, then the default activation will be returned.
+         *
+         * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated
+         * version of it, the class is considered active.
+         *
+         * @param {Element} element
+         * @param {string} className
+         * @param {boolean} [defaultActivation=false]
+         * @returns {boolean}
+         */
+        isActive: function(N, S, M) {
+          for (var L = "no-" + S; N; ) {
+            var z = N.classList;
+            if (z.contains(S))
+              return !0;
+            if (z.contains(L))
+              return !1;
+            N = N.parentElement;
+          }
+          return !!M;
+        }
+      },
+      /**
+       * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.
+       *
+       * @namespace
+       * @memberof Prism
+       * @public
+       */
+      languages: {
+        /**
+         * The grammar for plain, unformatted text.
+         */
+        plain: f,
+        plaintext: f,
+        text: f,
+        txt: f,
+        /**
+         * Creates a deep copy of the language with the given id and appends the given tokens.
+         *
+         * If a token in `redef` also appears in the copied language, then the existing token in the copied language
+         * will be overwritten at its original position.
+         *
+         * ## Best practices
+         *
+         * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)
+         * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to
+         * understand the language definition because, normally, the order of tokens matters in Prism grammars.
+         *
+         * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.
+         * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.
+         *
+         * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.
+         * @param {Grammar} redef The new tokens to append.
+         * @returns {Grammar} The new language created.
+         * @public
+         * @example
+         * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {
+         *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token
+         *     // at its original position
+         *     'comment': { ... },
+         *     // CSS doesn't have a 'color' token, so this token will be appended
+         *     'color': /\b(?:red|green|blue)\b/
+         * });
+         */
+        extend: function(N, S) {
+          var M = p.util.clone(p.languages[N]);
+          for (var L in S)
+            M[L] = S[L];
+          return M;
+        },
+        /**
+         * Inserts tokens _before_ another token in a language definition or any other grammar.
+         *
+         * ## Usage
+         *
+         * This helper method makes it easy to modify existing languages. For example, the CSS language definition
+         * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded
+         * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the
+         * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do
+         * this:
+         *
+         * ```js
+         * Prism.languages.markup.style = {
+         *     // token
+         * };
+         * ```
+         *
+         * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens
+         * before existing tokens. For the CSS example above, you would use it like this:
+         *
+         * ```js
+         * Prism.languages.insertBefore('markup', 'cdata', {
+         *     'style': {
+         *         // token
+         *     }
+         * });
+         * ```
+         *
+         * ## Special cases
+         *
+         * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar
+         * will be ignored.
+         *
+         * This behavior can be used to insert tokens after `before`:
+         *
+         * ```js
+         * Prism.languages.insertBefore('markup', 'comment', {
+         *     'comment': Prism.languages.markup.comment,
+         *     // tokens after 'comment'
+         * });
+         * ```
+         *
+         * ## Limitations
+         *
+         * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object
+         * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave
+         * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily
+         * deleting properties which is necessary to insert at arbitrary positions.
+         *
+         * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.
+         * Instead, it will create a new object and replace all references to the target object with the new one. This
+         * can be done without temporarily deleting properties, so the iteration order is well-defined.
+         *
+         * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if
+         * you hold the target object in a variable, then the value of the variable will not change.
+         *
+         * ```js
+         * var oldMarkup = Prism.languages.markup;
+         * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });
+         *
+         * assert(oldMarkup !== Prism.languages.markup);
+         * assert(newMarkup === Prism.languages.markup);
+         * ```
+         *
+         * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the
+         * object to be modified.
+         * @param {string} before The key to insert before.
+         * @param {Grammar} insert An object containing the key-value pairs to be inserted.
+         * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the
+         * object to be modified.
+         *
+         * Defaults to `Prism.languages`.
+         * @returns {Grammar} The new grammar object.
+         * @public
+         */
+        insertBefore: function(N, S, M, L) {
+          L = L || /** @type {any} */
+          p.languages;
+          var z = L[N], H = {};
+          for (var te in z)
+            if (z.hasOwnProperty(te)) {
+              if (te == S)
+                for (var Q in M)
+                  M.hasOwnProperty(Q) && (H[Q] = M[Q]);
+              M.hasOwnProperty(te) || (H[te] = z[te]);
+            }
+          var ce = L[N];
+          return L[N] = H, p.languages.DFS(p.languages, function(oe, Ce) {
+            Ce === ce && oe != N && (this[oe] = H);
+          }), H;
+        },
+        // Traverse a language definition with Depth First Search
+        DFS: function N(S, M, L, z) {
+          z = z || {};
+          var H = p.util.objId;
+          for (var te in S)
+            if (S.hasOwnProperty(te)) {
+              M.call(S, te, S[te], L || te);
+              var Q = S[te], ce = p.util.type(Q);
+              ce === "Object" && !z[H(Q)] ? (z[H(Q)] = !0, N(Q, M, null, z)) : ce === "Array" && !z[H(Q)] && (z[H(Q)] = !0, N(Q, M, te, z));
+            }
+        }
+      },
+      plugins: {},
+      /**
+       * This is the most high-level function in Prism’s API.
+       * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on
+       * each one of them.
+       *
+       * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.
+       *
+       * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.
+       * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.
+       * @memberof Prism
+       * @public
+       */
+      highlightAll: function(N, S) {
+        p.highlightAllUnder(document, N, S);
+      },
+      /**
+       * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls
+       * {@link Prism.highlightElement} on each one of them.
+       *
+       * The following hooks will be run:
+       * 1. `before-highlightall`
+       * 2. `before-all-elements-highlight`
+       * 3. All hooks of {@link Prism.highlightElement} for each element.
+       *
+       * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.
+       * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.
+       * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.
+       * @memberof Prism
+       * @public
+       */
+      highlightAllUnder: function(N, S, M) {
+        var L = {
+          callback: M,
+          container: N,
+          selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
+        };
+        p.hooks.run("before-highlightall", L), L.elements = Array.prototype.slice.apply(L.container.querySelectorAll(L.selector)), p.hooks.run("before-all-elements-highlight", L);
+        for (var z = 0, H; H = L.elements[z++]; )
+          p.highlightElement(H, S === !0, L.callback);
+      },
+      /**
+       * Highlights the code inside a single element.
+       *
+       * The following hooks will be run:
+       * 1. `before-sanity-check`
+       * 2. `before-highlight`
+       * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.
+       * 4. `before-insert`
+       * 5. `after-highlight`
+       * 6. `complete`
+       *
+       * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for
+       * the element's language.
+       *
+       * @param {Element} element The element containing the code.
+       * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.
+       * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers
+       * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is
+       * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).
+       *
+       * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for
+       * asynchronous highlighting to work. You can build your own bundle on the
+       * [Download page](https://prismjs.com/download.html).
+       * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.
+       * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.
+       * @memberof Prism
+       * @public
+       */
+      highlightElement: function(N, S, M) {
+        var L = p.util.getLanguage(N), z = p.languages[L];
+        p.util.setLanguage(N, L);
+        var H = N.parentElement;
+        H && H.nodeName.toLowerCase() === "pre" && p.util.setLanguage(H, L);
+        var te = N.textContent, Q = {
+          element: N,
+          language: L,
+          grammar: z,
+          code: te
+        };
+        function ce(Ce) {
+          Q.highlightedCode = Ce, p.hooks.run("before-insert", Q), Q.element.innerHTML = Q.highlightedCode, p.hooks.run("after-highlight", Q), p.hooks.run("complete", Q), M && M.call(Q.element);
+        }
+        if (p.hooks.run("before-sanity-check", Q), H = Q.element.parentElement, H && H.nodeName.toLowerCase() === "pre" && !H.hasAttribute("tabindex") && H.setAttribute("tabindex", "0"), !Q.code) {
+          p.hooks.run("complete", Q), M && M.call(Q.element);
+          return;
+        }
+        if (p.hooks.run("before-highlight", Q), !Q.grammar) {
+          ce(p.util.encode(Q.code));
+          return;
+        }
+        if (S && i.Worker) {
+          var oe = new Worker(p.filename);
+          oe.onmessage = function(Ce) {
+            ce(Ce.data);
+          }, oe.postMessage(JSON.stringify({
+            language: Q.language,
+            code: Q.code,
+            immediateClose: !0
+          }));
+        } else
+          ce(p.highlight(Q.code, Q.grammar, Q.language));
+      },
+      /**
+       * Low-level function, only use if you know what you’re doing. It accepts a string of text as input
+       * and the language definitions to use, and returns a string with the HTML produced.
+       *
+       * The following hooks will be run:
+       * 1. `before-tokenize`
+       * 2. `after-tokenize`
+       * 3. `wrap`: On each {@link Token}.
+       *
+       * @param {string} text A string with the code to be highlighted.
+       * @param {Grammar} grammar An object containing the tokens to use.
+       *
+       * Usually a language definition like `Prism.languages.markup`.
+       * @param {string} language The name of the language definition passed to `grammar`.
+       * @returns {string} The highlighted HTML.
+       * @memberof Prism
+       * @public
+       * @example
+       * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');
+       */
+      highlight: function(N, S, M) {
+        var L = {
+          code: N,
+          grammar: S,
+          language: M
+        };
+        if (p.hooks.run("before-tokenize", L), !L.grammar)
+          throw new Error('The language "' + L.language + '" has no grammar.');
+        return L.tokens = p.tokenize(L.code, L.grammar), p.hooks.run("after-tokenize", L), g.stringify(p.util.encode(L.tokens), L.language);
+      },
+      /**
+       * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input
+       * and the language definitions to use, and returns an array with the tokenized code.
+       *
+       * When the language definition includes nested tokens, the function is called recursively on each of these tokens.
+       *
+       * This method could be useful in other contexts as well, as a very crude parser.
+       *
+       * @param {string} text A string with the code to be highlighted.
+       * @param {Grammar} grammar An object containing the tokens to use.
+       *
+       * Usually a language definition like `Prism.languages.markup`.
+       * @returns {TokenStream} An array of strings and tokens, a token stream.
+       * @memberof Prism
+       * @public
+       * @example
+       * let code = `var foo = 0;`;
+       * let tokens = Prism.tokenize(code, Prism.languages.javascript);
+       * tokens.forEach(token => {
+       *     if (token instanceof Prism.Token && token.type === 'number') {
+       *         console.log(`Found numeric literal: ${token.content}`);
+       *     }
+       * });
+       */
+      tokenize: function(N, S) {
+        var M = S.rest;
+        if (M) {
+          for (var L in M)
+            S[L] = M[L];
+          delete S.rest;
+        }
+        var z = new T();
+        return P(z, z.head, N), D(N, z, S, z.head, 0), K(z);
+      },
+      /**
+       * @namespace
+       * @memberof Prism
+       * @public
+       */
+      hooks: {
+        all: {},
+        /**
+         * Adds the given callback to the list of callbacks for the given hook.
+         *
+         * The callback will be invoked when the hook it is registered for is run.
+         * Hooks are usually directly run by a highlight function but you can also run hooks yourself.
+         *
+         * One callback function can be registered to multiple hooks and the same hook multiple times.
+         *
+         * @param {string} name The name of the hook.
+         * @param {HookCallback} callback The callback function which is given environment variables.
+         * @public
+         */
+        add: function(N, S) {
+          var M = p.hooks.all;
+          M[N] = M[N] || [], M[N].push(S);
+        },
+        /**
+         * Runs a hook invoking all registered callbacks with the given environment variables.
+         *
+         * Callbacks will be invoked synchronously and in the order in which they were registered.
+         *
+         * @param {string} name The name of the hook.
+         * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.
+         * @public
+         */
+        run: function(N, S) {
+          var M = p.hooks.all[N];
+          if (!(!M || !M.length))
+            for (var L = 0, z; z = M[L++]; )
+              z(S);
+        }
+      },
+      Token: g
+    };
+    i.Prism = p;
+    function g(N, S, M, L) {
+      this.type = N, this.content = S, this.alias = M, this.length = (L || "").length | 0;
+    }
+    g.stringify = function N(S, M) {
+      if (typeof S == "string")
+        return S;
+      if (Array.isArray(S)) {
+        var L = "";
+        return S.forEach(function(ce) {
+          L += N(ce, M);
+        }), L;
+      }
+      var z = {
+        type: S.type,
+        content: N(S.content, M),
+        tag: "span",
+        classes: ["token", S.type],
+        attributes: {},
+        language: M
+      }, H = S.alias;
+      H && (Array.isArray(H) ? Array.prototype.push.apply(z.classes, H) : z.classes.push(H)), p.hooks.run("wrap", z);
+      var te = "";
+      for (var Q in z.attributes)
+        te += " " + Q + '="' + (z.attributes[Q] || "").replace(/"/g, "&quot;") + '"';
+      return "<" + z.tag + ' class="' + z.classes.join(" ") + '"' + te + ">" + z.content + "</" + z.tag + ">";
+    };
+    function y(N, S, M, L) {
+      N.lastIndex = S;
+      var z = N.exec(M);
+      if (z && L && z[1]) {
+        var H = z[1].length;
+        z.index += H, z[0] = z[0].slice(H);
+      }
+      return z;
+    }
+    function D(N, S, M, L, z, H) {
+      for (var te in M)
+        if (!(!M.hasOwnProperty(te) || !M[te])) {
+          var Q = M[te];
+          Q = Array.isArray(Q) ? Q : [Q];
+          for (var ce = 0; ce < Q.length; ++ce) {
+            if (H && H.cause == te + "," + ce)
+              return;
+            var oe = Q[ce], Ce = oe.inside, ke = !!oe.lookbehind, Pe = !!oe.greedy, et = oe.alias;
+            if (Pe && !oe.pattern.global) {
+              var vt = oe.pattern.toString().match(/[imsuy]*$/)[0];
+              oe.pattern = RegExp(oe.pattern.source, vt + "g");
+            }
+            for (var mt = oe.pattern || oe, Be = L.next, J = z; Be !== S.tail && !(H && J >= H.reach); J += Be.value.length, Be = Be.next) {
+              var _e = Be.value;
+              if (S.length > N.length)
+                return;
+              if (!(_e instanceof g)) {
+                var ae = 1, X;
+                if (Pe) {
+                  if (X = y(mt, J, N, ke), !X || X.index >= N.length)
+                    break;
+                  var it = X.index, ie = X.index + X[0].length, he = J;
+                  for (he += Be.value.length; it >= he; )
+                    Be = Be.next, he += Be.value.length;
+                  if (he -= Be.value.length, J = he, Be.value instanceof g)
+                    continue;
+                  for (var tt = Be; tt !== S.tail && (he < ie || typeof tt.value == "string"); tt = tt.next)
+                    ae++, he += tt.value.length;
+                  ae--, _e = N.slice(J, he), X.index -= J;
+                } else if (X = y(mt, 0, _e, ke), !X)
+                  continue;
+                var it = X.index, l0 = X[0], a0 = _e.slice(0, it), I0 = _e.slice(it + l0.length), g0 = J + _e.length;
+                H && g0 > H.reach && (H.reach = g0);
+                var pt = Be.prev;
+                a0 && (pt = P(S, pt, a0), J += a0.length), U(S, pt, ae);
+                var Ot = new g(te, Ce ? p.tokenize(l0, Ce) : l0, et, l0);
+                if (Be = P(S, pt, Ot), I0 && P(S, Be, I0), ae > 1) {
+                  var o0 = {
+                    cause: te + "," + ce,
+                    reach: g0
+                  };
+                  D(N, S, M, Be.prev, J, o0), H && o0.reach > H.reach && (H.reach = o0.reach);
+                }
+              }
+            }
+          }
+        }
+    }
+    function T() {
+      var N = { value: null, prev: null, next: null }, S = { value: null, prev: N, next: null };
+      N.next = S, this.head = N, this.tail = S, this.length = 0;
+    }
+    function P(N, S, M) {
+      var L = S.next, z = { value: M, prev: S, next: L };
+      return S.next = z, L.prev = z, N.length++, z;
+    }
+    function U(N, S, M) {
+      for (var L = S.next, z = 0; z < M && L !== N.tail; z++)
+        L = L.next;
+      S.next = L, L.prev = S, N.length -= z;
+    }
+    function K(N) {
+      for (var S = [], M = N.head.next; M !== N.tail; )
+        S.push(M.value), M = M.next;
+      return S;
+    }
+    if (!i.document)
+      return i.addEventListener && (p.disableWorkerMessageHandler || i.addEventListener("message", function(N) {
+        var S = JSON.parse(N.data), M = S.language, L = S.code, z = S.immediateClose;
+        i.postMessage(p.highlight(L, p.languages[M], M)), z && i.close();
+      }, !1)), p;
+    var ee = p.util.currentScript();
+    ee && (p.filename = ee.src, ee.hasAttribute("data-manual") && (p.manual = !0));
+    function Z() {
+      p.manual || p.highlightAll();
+    }
+    if (!p.manual) {
+      var R = document.readyState;
+      R === "loading" || R === "interactive" && ee && ee.defer ? document.addEventListener("DOMContentLoaded", Z) : window.requestAnimationFrame ? window.requestAnimationFrame(Z) : window.setTimeout(Z, 16);
+    }
+    return p;
+  }(r);
+  a.exports && (a.exports = s), typeof yr < "u" && (yr.Prism = s), s.languages.markup = {
+    comment: {
+      pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
+      greedy: !0
+    },
+    prolog: {
+      pattern: /<\?[\s\S]+?\?>/,
+      greedy: !0
+    },
+    doctype: {
+      // https://www.w3.org/TR/xml/#NT-doctypedecl
+      pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
+      greedy: !0,
+      inside: {
+        "internal-subset": {
+          pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
+          lookbehind: !0,
+          greedy: !0,
+          inside: null
+          // see below
+        },
+        string: {
+          pattern: /"[^"]*"|'[^']*'/,
+          greedy: !0
+        },
+        punctuation: /^<!|>$|[[\]]/,
+        "doctype-tag": /^DOCTYPE/i,
+        name: /[^\s<>'"]+/
+      }
+    },
+    cdata: {
+      pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
+      greedy: !0
+    },
+    tag: {
+      pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
+      greedy: !0,
+      inside: {
+        tag: {
+          pattern: /^<\/?[^\s>\/]+/,
+          inside: {
+            punctuation: /^<\/?/,
+            namespace: /^[^\s>\/:]+:/
+          }
+        },
+        "special-attr": [],
+        "attr-value": {
+          pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
+          inside: {
+            punctuation: [
+              {
+                pattern: /^=/,
+                alias: "attr-equals"
+              },
+              {
+                pattern: /^(\s*)["']|["']$/,
+                lookbehind: !0
+              }
+            ]
+          }
+        },
+        punctuation: /\/?>/,
+        "attr-name": {
+          pattern: /[^\s>\/]+/,
+          inside: {
+            namespace: /^[^\s>\/:]+:/
+          }
+        }
+      }
+    },
+    entity: [
+      {
+        pattern: /&[\da-z]{1,8};/i,
+        alias: "named-entity"
+      },
+      /&#x?[\da-f]{1,8};/i
+    ]
+  }, s.languages.markup.tag.inside["attr-value"].inside.entity = s.languages.markup.entity, s.languages.markup.doctype.inside["internal-subset"].inside = s.languages.markup, s.hooks.add("wrap", function(i) {
+    i.type === "entity" && (i.attributes.title = i.content.replace(/&amp;/, "&"));
+  }), Object.defineProperty(s.languages.markup.tag, "addInlined", {
+    /**
+     * Adds an inlined language to markup.
+     *
+     * An example of an inlined language is CSS with `<style>` tags.
+     *
+     * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
+     * case insensitive.
+     * @param {string} lang The language key.
+     * @example
+     * addInlined('style', 'css');
+     */
+    value: function(o, u) {
+      var f = {};
+      f["language-" + u] = {
+        pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
+        lookbehind: !0,
+        inside: s.languages[u]
+      }, f.cdata = /^<!\[CDATA\[|\]\]>$/i;
+      var p = {
+        "included-cdata": {
+          pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
+          inside: f
+        }
+      };
+      p["language-" + u] = {
+        pattern: /[\s\S]+/,
+        inside: s.languages[u]
+      };
+      var g = {};
+      g[o] = {
+        pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function() {
+          return o;
+        }), "i"),
+        lookbehind: !0,
+        greedy: !0,
+        inside: p
+      }, s.languages.insertBefore("markup", "cdata", g);
+    }
+  }), Object.defineProperty(s.languages.markup.tag, "addAttribute", {
+    /**
+     * Adds an pattern to highlight languages embedded in HTML attributes.
+     *
+     * An example of an inlined language is CSS with `style` attributes.
+     *
+     * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as
+     * case insensitive.
+     * @param {string} lang The language key.
+     * @example
+     * addAttribute('style', 'css');
+     */
+    value: function(i, o) {
+      s.languages.markup.tag.inside["special-attr"].push({
+        pattern: RegExp(
+          /(^|["'\s])/.source + "(?:" + i + ")" + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
+          "i"
+        ),
+        lookbehind: !0,
+        inside: {
+          "attr-name": /^[^\s=]+/,
+          "attr-value": {
+            pattern: /=[\s\S]+/,
+            inside: {
+              value: {
+                pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
+                lookbehind: !0,
+                alias: [o, "language-" + o],
+                inside: s.languages[o]
+              },
+              punctuation: [
+                {
+                  pattern: /^=/,
+                  alias: "attr-equals"
+                },
+                /"|'/
+              ]
+            }
+          }
+        }
+      });
+    }
+  }), s.languages.html = s.languages.markup, s.languages.mathml = s.languages.markup, s.languages.svg = s.languages.markup, s.languages.xml = s.languages.extend("markup", {}), s.languages.ssml = s.languages.xml, s.languages.atom = s.languages.xml, s.languages.rss = s.languages.xml, function(i) {
+    var o = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
+    i.languages.css = {
+      comment: /\/\*[\s\S]*?\*\//,
+      atrule: {
+        pattern: RegExp("@[\\w-](?:" + /[^;{\s"']|\s+(?!\s)/.source + "|" + o.source + ")*?" + /(?:;|(?=\s*\{))/.source),
+        inside: {
+          rule: /^@[\w-]+/,
+          "selector-function-argument": {
+            pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
+            lookbehind: !0,
+            alias: "selector"
+          },
+          keyword: {
+            pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
+            lookbehind: !0
+          }
+          // See rest below
+        }
+      },
+      url: {
+        // https://drafts.csswg.org/css-values-3/#urls
+        pattern: RegExp("\\burl\\((?:" + o.source + "|" + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ")\\)", "i"),
+        greedy: !0,
+        inside: {
+          function: /^url/i,
+          punctuation: /^\(|\)$/,
+          string: {
+            pattern: RegExp("^" + o.source + "$"),
+            alias: "url"
+          }
+        }
+      },
+      selector: {
+        pattern: RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|` + o.source + ")*(?=\\s*\\{)"),
+        lookbehind: !0
+      },
+      string: {
+        pattern: o,
+        greedy: !0
+      },
+      property: {
+        pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
+        lookbehind: !0
+      },
+      important: /!important\b/i,
+      function: {
+        pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
+        lookbehind: !0
+      },
+      punctuation: /[(){};:,]/
+    }, i.languages.css.atrule.inside.rest = i.languages.css;
+    var u = i.languages.markup;
+    u && (u.tag.addInlined("style", "css"), u.tag.addAttribute("style", "css"));
+  }(s), s.languages.clike = {
+    comment: [
+      {
+        pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
+        lookbehind: !0,
+        greedy: !0
+      },
+      {
+        pattern: /(^|[^\\:])\/\/.*/,
+        lookbehind: !0,
+        greedy: !0
+      }
+    ],
+    string: {
+      pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+      greedy: !0
+    },
+    "class-name": {
+      pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
+      lookbehind: !0,
+      inside: {
+        punctuation: /[.\\]/
+      }
+    },
+    keyword: /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
+    boolean: /\b(?:false|true)\b/,
+    function: /\b\w+(?=\()/,
+    number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+    operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
+    punctuation: /[{}[\];(),.:]/
+  }, s.languages.javascript = s.languages.extend("clike", {
+    "class-name": [
+      s.languages.clike["class-name"],
+      {
+        pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
+        lookbehind: !0
+      }
+    ],
+    keyword: [
+      {
+        pattern: /((?:^|\})\s*)catch\b/,
+        lookbehind: !0
+      },
+      {
+        pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+        lookbehind: !0
+      }
+    ],
+    // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
+    function: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+    number: {
+      pattern: RegExp(
+        /(^|[^\w$])/.source + "(?:" + // constant
+        (/NaN|Infinity/.source + "|" + // binary integer
+        /0[bB][01]+(?:_[01]+)*n?/.source + "|" + // octal integer
+        /0[oO][0-7]+(?:_[0-7]+)*n?/.source + "|" + // hexadecimal integer
+        /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + "|" + // decimal bigint
+        /\d+(?:_\d+)*n/.source + "|" + // decimal number (integer or float) but no bigint
+        /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ")" + /(?![\w$])/.source
+      ),
+      lookbehind: !0
+    },
+    operator: /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
+  }), s.languages.javascript["class-name"][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/, s.languages.insertBefore("javascript", "keyword", {
+    regex: {
+      pattern: RegExp(
+        // lookbehind
+        // eslint-disable-next-line regexp/no-dupe-characters-character-class
+        /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + // Regex pattern:
+        // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character
+        // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible
+        // with the only syntax, so we have to define 2 different regex patterns.
+        /\//.source + "(?:" + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source + "|" + // `v` flag syntax. This supports 3 levels of nested character classes.
+        /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source + ")" + // lookahead
+        /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source
+      ),
+      lookbehind: !0,
+      greedy: !0,
+      inside: {
+        "regex-source": {
+          pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
+          lookbehind: !0,
+          alias: "language-regex",
+          inside: s.languages.regex
+        },
+        "regex-delimiter": /^\/|\/$/,
+        "regex-flags": /^[a-z]+$/
+      }
+    },
+    // This must be declared before keyword because we use "function" inside the look-forward
+    "function-variable": {
+      pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
+      alias: "function"
+    },
+    parameter: [
+      {
+        pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
+        lookbehind: !0,
+        inside: s.languages.javascript
+      },
+      {
+        pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
+        lookbehind: !0,
+        inside: s.languages.javascript
+      },
+      {
+        pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
+        lookbehind: !0,
+        inside: s.languages.javascript
+      },
+      {
+        pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
+        lookbehind: !0,
+        inside: s.languages.javascript
+      }
+    ],
+    constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/
+  }), s.languages.insertBefore("javascript", "string", {
+    hashbang: {
+      pattern: /^#!.*/,
+      greedy: !0,
+      alias: "comment"
+    },
+    "template-string": {
+      pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
+      greedy: !0,
+      inside: {
+        "template-punctuation": {
+          pattern: /^`|`$/,
+          alias: "string"
+        },
+        interpolation: {
+          pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+          lookbehind: !0,
+          inside: {
+            "interpolation-punctuation": {
+              pattern: /^\$\{|\}$/,
+              alias: "punctuation"
+            },
+            rest: s.languages.javascript
+          }
+        },
+        string: /[\s\S]+/
+      }
+    },
+    "string-property": {
+      pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
+      lookbehind: !0,
+      greedy: !0,
+      alias: "property"
+    }
+  }), s.languages.insertBefore("javascript", "operator", {
+    "literal-property": {
+      pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
+      lookbehind: !0,
+      alias: "property"
+    }
+  }), s.languages.markup && (s.languages.markup.tag.addInlined("script", "javascript"), s.languages.markup.tag.addAttribute(
+    /on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,
+    "javascript"
+  )), s.languages.js = s.languages.javascript, function() {
+    if (typeof s > "u" || typeof document > "u")
+      return;
+    Element.prototype.matches || (Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector);
+    var i = "Loading…", o = function(ee, Z) {
+      return "✖ Error " + ee + " while fetching file: " + Z;
+    }, u = "✖ Error: File does not exist or is empty", f = {
+      js: "javascript",
+      py: "python",
+      rb: "ruby",
+      ps1: "powershell",
+      psm1: "powershell",
+      sh: "bash",
+      bat: "batch",
+      h: "c",
+      tex: "latex"
+    }, p = "data-src-status", g = "loading", y = "loaded", D = "failed", T = "pre[data-src]:not([" + p + '="' + y + '"]):not([' + p + '="' + g + '"])';
+    function P(ee, Z, R) {
+      var N = new XMLHttpRequest();
+      N.open("GET", ee, !0), N.onreadystatechange = function() {
+        N.readyState == 4 && (N.status < 400 && N.responseText ? Z(N.responseText) : N.status >= 400 ? R(o(N.status, N.statusText)) : R(u));
+      }, N.send(null);
+    }
+    function U(ee) {
+      var Z = /^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(ee || "");
+      if (Z) {
+        var R = Number(Z[1]), N = Z[2], S = Z[3];
+        return N ? S ? [R, Number(S)] : [R, void 0] : [R, R];
+      }
+    }
+    s.hooks.add("before-highlightall", function(ee) {
+      ee.selector += ", " + T;
+    }), s.hooks.add("before-sanity-check", function(ee) {
+      var Z = (
+        /** @type {HTMLPreElement} */
+        ee.element
+      );
+      if (Z.matches(T)) {
+        ee.code = "", Z.setAttribute(p, g);
+        var R = Z.appendChild(document.createElement("CODE"));
+        R.textContent = i;
+        var N = Z.getAttribute("data-src"), S = ee.language;
+        if (S === "none") {
+          var M = (/\.(\w+)$/.exec(N) || [, "none"])[1];
+          S = f[M] || M;
+        }
+        s.util.setLanguage(R, S), s.util.setLanguage(Z, S);
+        var L = s.plugins.autoloader;
+        L && L.loadLanguages(S), P(
+          N,
+          function(z) {
+            Z.setAttribute(p, y);
+            var H = U(Z.getAttribute("data-range"));
+            if (H) {
+              var te = z.split(/\r\n?|\n/g), Q = H[0], ce = H[1] == null ? te.length : H[1];
+              Q < 0 && (Q += te.length), Q = Math.max(0, Math.min(Q - 1, te.length)), ce < 0 && (ce += te.length), ce = Math.max(0, Math.min(ce, te.length)), z = te.slice(Q, ce).join(`
+`), Z.hasAttribute("data-start") || Z.setAttribute("data-start", String(Q + 1));
+            }
+            R.textContent = z, s.highlightElement(R);
+          },
+          function(z) {
+            Z.setAttribute(p, D), R.textContent = z;
+          }
+        );
+      }
+    }), s.plugins.fileHighlight = {
+      /**
+       * Executes the File Highlight plugin for all matching `pre` elements under the given container.
+       *
+       * Note: Elements which are already loaded or currently loading will not be touched by this method.
+       *
+       * @param {ParentNode} [container=document]
+       */
+      highlight: function(Z) {
+        for (var R = (Z || document).querySelectorAll(T), N = 0, S; S = R[N++]; )
+          s.highlightElement(S);
+      }
+    };
+    var K = !1;
+    s.fileHighlight = function() {
+      K || (console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."), K = !0), s.plugins.fileHighlight.highlight.apply(this, arguments);
+    };
+  }();
+})(No);
+var Lh = No.exports;
+const Ss = /* @__PURE__ */ bo(Lh);
+Prism.languages.python = {
+  comment: {
+    pattern: /(^|[^\\])#.*/,
+    lookbehind: !0,
+    greedy: !0
+  },
+  "string-interpolation": {
+    pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
+    greedy: !0,
+    inside: {
+      interpolation: {
+        // "{" <expression> <optional "!s", "!r", or "!a"> <optional ":" format specifier> "}"
+        pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
+        lookbehind: !0,
+        inside: {
+          "format-spec": {
+            pattern: /(:)[^:(){}]+(?=\}$)/,
+            lookbehind: !0
+          },
+          "conversion-option": {
+            pattern: /![sra](?=[:}]$)/,
+            alias: "punctuation"
+          },
+          rest: null
+        }
+      },
+      string: /[\s\S]+/
+    }
+  },
+  "triple-quoted-string": {
+    pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
+    greedy: !0,
+    alias: "string"
+  },
+  string: {
+    pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
+    greedy: !0
+  },
+  function: {
+    pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
+    lookbehind: !0
+  },
+  "class-name": {
+    pattern: /(\bclass\s+)\w+/i,
+    lookbehind: !0
+  },
+  decorator: {
+    pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
+    lookbehind: !0,
+    alias: ["annotation", "punctuation"],
+    inside: {
+      punctuation: /\./
+    }
+  },
+  keyword: /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
+  builtin: /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
+  boolean: /\b(?:False|None|True)\b/,
+  number: /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
+  operator: /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
+  punctuation: /[{}[\];(),.:]/
+};
+Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest = Prism.languages.python;
+Prism.languages.py = Prism.languages.python;
+(function(a) {
+  var r = /\\(?:[^a-z()[\]]|[a-z*]+)/i, s = {
+    "equation-command": {
+      pattern: r,
+      alias: "regex"
+    }
+  };
+  a.languages.latex = {
+    comment: /%.*/,
+    // the verbatim environment prints whitespace to the document
+    cdata: {
+      pattern: /(\\begin\{((?:lstlisting|verbatim)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
+      lookbehind: !0
+    },
+    /*
+     * equations can be between $$ $$ or $ $ or \( \) or \[ \]
+     * (all are multiline)
+     */
+    equation: [
+      {
+        pattern: /\$\$(?:\\[\s\S]|[^\\$])+\$\$|\$(?:\\[\s\S]|[^\\$])+\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,
+        inside: s,
+        alias: "string"
+      },
+      {
+        pattern: /(\\begin\{((?:align|eqnarray|equation|gather|math|multline)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
+        lookbehind: !0,
+        inside: s,
+        alias: "string"
+      }
+    ],
+    /*
+     * arguments which are keywords or references are highlighted
+     * as keywords
+     */
+    keyword: {
+      pattern: /(\\(?:begin|cite|documentclass|end|label|ref|usepackage)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,
+      lookbehind: !0
+    },
+    url: {
+      pattern: /(\\url\{)[^}]+(?=\})/,
+      lookbehind: !0
+    },
+    /*
+     * section or chapter headlines are highlighted as bold so that
+     * they stand out more
+     */
+    headline: {
+      pattern: /(\\(?:chapter|frametitle|paragraph|part|section|subparagraph|subsection|subsubparagraph|subsubsection|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\})/,
+      lookbehind: !0,
+      alias: "class-name"
+    },
+    function: {
+      pattern: r,
+      alias: "selector"
+    },
+    punctuation: /[[\]{}&]/
+  }, a.languages.tex = a.languages.latex, a.languages.context = a.languages.latex;
+})(Prism);
+(function(a) {
+  var r = "\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b", s = {
+    pattern: /(^(["']?)\w+\2)[ \t]+\S.*/,
+    lookbehind: !0,
+    alias: "punctuation",
+    // this looks reasonably well in all themes
+    inside: null
+    // see below
+  }, i = {
+    bash: s,
+    environment: {
+      pattern: RegExp("\\$" + r),
+      alias: "constant"
+    },
+    variable: [
+      // [0]: Arithmetic Environment
+      {
+        pattern: /\$?\(\([\s\S]+?\)\)/,
+        greedy: !0,
+        inside: {
+          // If there is a $ sign at the beginning highlight $(( and )) as variable
+          variable: [
+            {
+              pattern: /(^\$\(\([\s\S]+)\)\)/,
+              lookbehind: !0
+            },
+            /^\$\(\(/
+          ],
+          number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
+          // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
+          operator: /--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,
+          // If there is no $ sign at the beginning highlight (( and )) as punctuation
+          punctuation: /\(\(?|\)\)?|,|;/
+        }
+      },
+      // [1]: Command Substitution
+      {
+        pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,
+        greedy: !0,
+        inside: {
+          variable: /^\$\(|^`|\)$|`$/
+        }
+      },
+      // [2]: Brace expansion
+      {
+        pattern: /\$\{[^}]+\}/,
+        greedy: !0,
+        inside: {
+          operator: /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,
+          punctuation: /[\[\]]/,
+          environment: {
+            pattern: RegExp("(\\{)" + r),
+            lookbehind: !0,
+            alias: "constant"
+          }
+        }
+      },
+      /\$(?:\w+|[#?*!@$])/
+    ],
+    // Escape sequences from echo and printf's manuals, and escaped quotes.
+    entity: /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/
+  };
+  a.languages.bash = {
+    shebang: {
+      pattern: /^#!\s*\/.*/,
+      alias: "important"
+    },
+    comment: {
+      pattern: /(^|[^"{\\$])#.*/,
+      lookbehind: !0
+    },
+    "function-name": [
+      // a) function foo {
+      // b) foo() {
+      // c) function foo() {
+      // but not “foo {”
+      {
+        // a) and c)
+        pattern: /(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,
+        lookbehind: !0,
+        alias: "function"
+      },
+      {
+        // b)
+        pattern: /\b[\w-]+(?=\s*\(\s*\)\s*\{)/,
+        alias: "function"
+      }
+    ],
+    // Highlight variable names as variables in for and select beginnings.
+    "for-or-select": {
+      pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/,
+      alias: "variable",
+      lookbehind: !0
+    },
+    // Highlight variable names as variables in the left-hand part
+    // of assignments (“=” and “+=”).
+    "assign-left": {
+      pattern: /(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,
+      inside: {
+        environment: {
+          pattern: RegExp("(^|[\\s;|&]|[<>]\\()" + r),
+          lookbehind: !0,
+          alias: "constant"
+        }
+      },
+      alias: "variable",
+      lookbehind: !0
+    },
+    // Highlight parameter names as variables
+    parameter: {
+      pattern: /(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,
+      alias: "variable",
+      lookbehind: !0
+    },
+    string: [
+      // Support for Here-documents https://en.wikipedia.org/wiki/Here_document
+      {
+        pattern: /((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,
+        lookbehind: !0,
+        greedy: !0,
+        inside: i
+      },
+      // Here-document with quotes around the tag
+      // → No expansion (so no “inside”).
+      {
+        pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,
+        lookbehind: !0,
+        greedy: !0,
+        inside: {
+          bash: s
+        }
+      },
+      // “Normal” string
+      {
+        // https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
+        pattern: /(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,
+        lookbehind: !0,
+        greedy: !0,
+        inside: i
+      },
+      {
+        // https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html
+        pattern: /(^|[^$\\])'[^']*'/,
+        lookbehind: !0,
+        greedy: !0
+      },
+      {
+        // https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
+        pattern: /\$'(?:[^'\\]|\\[\s\S])*'/,
+        greedy: !0,
+        inside: {
+          entity: i.entity
+        }
+      }
+    ],
+    environment: {
+      pattern: RegExp("\\$?" + r),
+      alias: "constant"
+    },
+    variable: i.variable,
+    function: {
+      pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,
+      lookbehind: !0
+    },
+    keyword: {
+      pattern: /(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,
+      lookbehind: !0
+    },
+    // https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
+    builtin: {
+      pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,
+      lookbehind: !0,
+      // Alias added to make those easier to distinguish from strings.
+      alias: "class-name"
+    },
+    boolean: {
+      pattern: /(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,
+      lookbehind: !0
+    },
+    "file-descriptor": {
+      pattern: /\B&\d\b/,
+      alias: "important"
+    },
+    operator: {
+      // Lots of redirections here, but not just that.
+      pattern: /\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,
+      inside: {
+        "file-descriptor": {
+          pattern: /^\d/,
+          alias: "important"
+        }
+      }
+    },
+    punctuation: /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,
+    number: {
+      pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,
+      lookbehind: !0
+    }
+  }, s.inside = a.languages.bash;
+  for (var o = [
+    "comment",
+    "function-name",
+    "for-or-select",
+    "assign-left",
+    "parameter",
+    "string",
+    "environment",
+    "function",
+    "keyword",
+    "builtin",
+    "boolean",
+    "file-descriptor",
+    "operator",
+    "punctuation",
+    "number"
+  ], u = i.variable[1].inside, f = 0; f < o.length; f++)
+    u[o[f]] = a.languages.bash[o[f]];
+  a.languages.sh = a.languages.bash, a.languages.shell = a.languages.bash;
+})(Prism);
+function Jl(a, r) {
+  return a ?? r();
+}
+function Oh(a) {
+  let r, s = a[0], i = 1;
+  for (; i < a.length; ) {
+    const o = a[i], u = a[i + 1];
+    if (i += 2, (o === "optionalAccess" || o === "optionalCall") && s == null)
+      return;
+    o === "access" || o === "optionalAccess" ? (r = s, s = u(s)) : (o === "call" || o === "optionalCall") && (s = u((...f) => s.call(r, ...f)), r = void 0);
+  }
+  return s;
+}
+const qh = '<svg class="md-link-icon" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true" fill="currentColor"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>', Ph = `<svg
+xmlns="http://www.w3.org/2000/svg"
+width="100%"
+height="100%"
+viewBox="0 0 32 32"
+><path
+  fill="currentColor"
+  d="M28 10v18H10V10h18m0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2Z"
+/><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z" /></svg>`, Hh = `<svg
+xmlns="http://www.w3.org/2000/svg"
+width="100%"
+height="100%"
+viewBox="0 0 24 24"
+fill="none"
+stroke="currentColor"
+stroke-width="3"
+stroke-linecap="round"
+stroke-linejoin="round"><polyline points="20 6 9 17 4 12" /></svg>`, $l = `<button title="copy" class="copy_code_button">
+<span class="copy-text">${Ph}</span>
+<span class="check">${Hh}</span>
+</button>`, Ro = /[&<>"']/, Uh = new RegExp(Ro.source, "g"), Io = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, Gh = new RegExp(Io.source, "g"), Vh = {
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;",
+  '"': "&quot;",
+  "'": "&#39;"
+}, ea = (a) => Vh[a] || "";
+function Fs(a, r) {
+  if (r) {
+    if (Ro.test(a))
+      return a.replace(Uh, ea);
+  } else if (Io.test(a))
+    return a.replace(Gh, ea);
+  return a;
+}
+const Wh = {
+  code(a, r, s) {
+    const i = Jl(Oh([Jl(r, () => ""), "access", (o) => o.match, "call", (o) => o(/\S*/), "optionalAccess", (o) => o[0]]), () => "");
+    return a = a.replace(/\n$/, "") + `
+`, i ? '<div class="code_wrap">' + $l + '<pre><code class="language-' + Fs(i) + '">' + (s ? a : Fs(a, !0)) + `</code></pre></div>
+` : '<div class="code_wrap">' + $l + "<pre><code>" + (s ? a : Fs(a, !0)) + `</code></pre></div>
+`;
+  }
+}, jh = new Bo();
+function Xh({
+  header_links: a,
+  line_breaks: r
+}) {
+  const s = new Co();
+  return s.use(
+    {
+      gfm: !0,
+      pedantic: !1,
+      breaks: r
+    },
+    Ch({
+      highlight: (i, o) => Ss.languages[o] ? Ss.highlight(i, Ss.languages[o], o) : i
+    }),
+    { renderer: Wh }
+  ), a && (s.use(Ih()), s.use({
+    extensions: [
+      {
+        name: "heading",
+        level: "block",
+        renderer(i) {
+          const o = i.raw.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi, ""), u = "h" + jh.slug(o), f = i.depth, p = this.parser.parseInline(i.tokens);
+          return `<h${f} id="${u}"><a class="md-header-anchor" href="#${u}">${qh}</a>${p}</h${f}>
+`;
+        }
+      }
+    ]
+  })), s;
+}
+const {
+  HtmlTag: Yh,
+  SvelteComponent: Zh,
+  attr: Kh,
+  binding_callbacks: Qh,
+  detach: Ys,
+  element: Jh,
+  empty: $h,
+  init: e2,
+  insert: Zs,
+  noop: ta,
+  safe_not_equal: t2,
+  set_data: n2,
+  text: r2,
+  toggle_class: na
+} = window.__gradio__svelte__internal, { afterUpdate: s2, createEventDispatcher: b3 } = window.__gradio__svelte__internal;
+function i2(a) {
+  let r;
+  return {
+    c() {
+      r = r2(
+        /*html*/
+        a[3]
+      );
+    },
+    m(s, i) {
+      Zs(s, r, i);
+    },
+    p(s, i) {
+      i & /*html*/
+      8 && n2(
+        r,
+        /*html*/
+        s[3]
+      );
+    },
+    d(s) {
+      s && Ys(r);
+    }
+  };
+}
+function l2(a) {
+  let r, s;
+  return {
+    c() {
+      r = new Yh(!1), s = $h(), r.a = s;
+    },
+    m(i, o) {
+      r.m(
+        /*html*/
+        a[3],
+        i,
+        o
+      ), Zs(i, s, o);
+    },
+    p(i, o) {
+      o & /*html*/
+      8 && r.p(
+        /*html*/
+        i[3]
+      );
+    },
+    d(i) {
+      i && (Ys(s), r.d());
+    }
+  };
+}
+function a2(a) {
+  let r;
+  function s(u, f) {
+    return (
+      /*render_markdown*/
+      u[1] ? l2 : i2
+    );
+  }
+  let i = s(a), o = i(a);
+  return {
+    c() {
+      r = Jh("span"), o.c(), Kh(r, "class", "md svelte-k1dqs7"), na(
+        r,
+        "chatbot",
+        /*chatbot*/
+        a[0]
+      );
+    },
+    m(u, f) {
+      Zs(u, r, f), o.m(r, null), a[9](r);
+    },
+    p(u, [f]) {
+      i === (i = s(u)) && o ? o.p(u, f) : (o.d(1), o = i(u), o && (o.c(), o.m(r, null))), f & /*chatbot*/
+      1 && na(
+        r,
+        "chatbot",
+        /*chatbot*/
+        u[0]
+      );
+    },
+    i: ta,
+    o: ta,
+    d(u) {
+      u && Ys(r), o.d(), a[9](null);
+    }
+  };
+}
+function o2(a, r, s) {
+  let { chatbot: i = !0 } = r, { message: o } = r, { sanitize_html: u = !0 } = r, { latex_delimiters: f = [] } = r, { render_markdown: p = !0 } = r, { line_breaks: g = !0 } = r, { header_links: y = !1 } = r, D, T;
+  const P = Xh({ header_links: y, line_breaks: g }), U = (R) => {
+    try {
+      return !!R && new URL(R, location.href).origin !== location.origin;
+    } catch {
+      return !1;
+    }
+  };
+  ql.addHook("afterSanitizeAttributes", function(R) {
+    "target" in R && U(R.getAttribute("href")) && (R.setAttribute("target", "_blank"), R.setAttribute("rel", "noopener noreferrer"));
+  });
+  function K(R) {
+    return p && (R = P.parse(R)), u && (R = ql.sanitize(R)), R;
+  }
+  async function ee(R) {
+    f.length > 0 && R && Y4(D, {
+      delimiters: f,
+      throwOnError: !1
+    });
+  }
+  s2(() => ee(o));
+  function Z(R) {
+    Qh[R ? "unshift" : "push"](() => {
+      D = R, s(2, D);
+    });
+  }
+  return a.$$set = (R) => {
+    "chatbot" in R && s(0, i = R.chatbot), "message" in R && s(4, o = R.message), "sanitize_html" in R && s(5, u = R.sanitize_html), "latex_delimiters" in R && s(6, f = R.latex_delimiters), "render_markdown" in R && s(1, p = R.render_markdown), "line_breaks" in R && s(7, g = R.line_breaks), "header_links" in R && s(8, y = R.header_links);
+  }, a.$$.update = () => {
+    a.$$.dirty & /*message*/
+    16 && (o && o.trim() ? s(3, T = K(o)) : s(3, T = ""));
+  }, [
+    i,
+    p,
+    D,
+    T,
+    o,
+    u,
+    f,
+    g,
+    y,
+    Z
+  ];
+}
+class u2 extends Zh {
+  constructor(r) {
+    super(), e2(this, r, o2, a2, t2, {
+      chatbot: 0,
+      message: 4,
+      sanitize_html: 5,
+      latex_delimiters: 6,
+      render_markdown: 1,
+      line_breaks: 7,
+      header_links: 8
+    });
+  }
+}
+function an(a) {
+  let r = ["", "k", "M", "G", "T", "P", "E", "Z"], s = 0;
+  for (; a > 1e3 && s < r.length - 1; )
+    a /= 1e3, s++;
+  let i = r[s];
+  return (Number.isInteger(a) ? a : a.toFixed(1)) + i;
+}
+function wr() {
+}
+function c2(a, r) {
+  return a != a ? r == r : a !== r || a && typeof a == "object" || typeof a == "function";
+}
+const Lo = typeof window < "u";
+let ra = Lo ? () => window.performance.now() : () => Date.now(), Oo = Lo ? (a) => requestAnimationFrame(a) : wr;
+const un = /* @__PURE__ */ new Set();
+function qo(a) {
+  un.forEach((r) => {
+    r.c(a) || (un.delete(r), r.f());
+  }), un.size !== 0 && Oo(qo);
+}
+function h2(a) {
+  let r;
+  return un.size === 0 && Oo(qo), {
+    promise: new Promise((s) => {
+      un.add(r = { c: a, f: s });
+    }),
+    abort() {
+      un.delete(r);
+    }
+  };
+}
+const sn = [];
+function f2(a, r = wr) {
+  let s;
+  const i = /* @__PURE__ */ new Set();
+  function o(p) {
+    if (c2(a, p) && (a = p, s)) {
+      const g = !sn.length;
+      for (const y of i)
+        y[1](), sn.push(y, a);
+      if (g) {
+        for (let y = 0; y < sn.length; y += 2)
+          sn[y][0](sn[y + 1]);
+        sn.length = 0;
+      }
+    }
+  }
+  function u(p) {
+    o(p(a));
+  }
+  function f(p, g = wr) {
+    const y = [p, g];
+    return i.add(y), i.size === 1 && (s = r(o, u) || wr), p(a), () => {
+      i.delete(y), i.size === 0 && s && (s(), s = null);
+    };
+  }
+  return { set: o, update: u, subscribe: f };
+}
+function sa(a) {
+  return Object.prototype.toString.call(a) === "[object Date]";
+}
+function qs(a, r, s, i) {
+  if (typeof s == "number" || sa(s)) {
+    const o = i - s, u = (s - r) / (a.dt || 1 / 60), f = a.opts.stiffness * o, p = a.opts.damping * u, g = (f - p) * a.inv_mass, y = (u + g) * a.dt;
+    return Math.abs(y) < a.opts.precision && Math.abs(o) < a.opts.precision ? i : (a.settled = !1, sa(s) ? new Date(s.getTime() + y) : s + y);
+  } else {
+    if (Array.isArray(s))
+      return s.map(
+        (o, u) => qs(a, r[u], s[u], i[u])
+      );
+    if (typeof s == "object") {
+      const o = {};
+      for (const u in s)
+        o[u] = qs(a, r[u], s[u], i[u]);
+      return o;
+    } else
+      throw new Error(`Cannot spring ${typeof s} values`);
+  }
+}
+function ia(a, r = {}) {
+  const s = f2(a), { stiffness: i = 0.15, damping: o = 0.8, precision: u = 0.01 } = r;
+  let f, p, g, y = a, D = a, T = 1, P = 0, U = !1;
+  function K(Z, R = {}) {
+    D = Z;
+    const N = g = {};
+    return a == null || R.hard || ee.stiffness >= 1 && ee.damping >= 1 ? (U = !0, f = ra(), y = Z, s.set(a = D), Promise.resolve()) : (R.soft && (P = 1 / ((R.soft === !0 ? 0.5 : +R.soft) * 60), T = 0), p || (f = ra(), U = !1, p = h2((S) => {
+      if (U)
+        return U = !1, p = null, !1;
+      T = Math.min(T + P, 1);
+      const M = {
+        inv_mass: T,
+        opts: ee,
+        settled: !0,
+        dt: (S - f) * 60 / 1e3
+      }, L = qs(M, y, a, D);
+      return f = S, y = a, s.set(a = L), M.settled && (p = null), !M.settled;
+    })), new Promise((S) => {
+      p.promise.then(() => {
+        N === g && S();
+      });
+    }));
+  }
+  const ee = {
+    set: K,
+    update: (Z, R) => K(Z(D, a), R),
+    subscribe: s.subscribe,
+    stiffness: i,
+    damping: o,
+    precision: u
+  };
+  return ee;
+}
+const {
+  SvelteComponent: d2,
+  append: Ut,
+  attr: Se,
+  component_subscribe: la,
+  detach: m2,
+  element: p2,
+  init: g2,
+  insert: b2,
+  noop: aa,
+  safe_not_equal: w2,
+  set_style: fr,
+  svg_element: Gt,
+  toggle_class: oa
+} = window.__gradio__svelte__internal, { onMount: y2 } = window.__gradio__svelte__internal;
+function _2(a) {
+  let r, s, i, o, u, f, p, g, y, D, T, P;
+  return {
+    c() {
+      r = p2("div"), s = Gt("svg"), i = Gt("g"), o = Gt("path"), u = Gt("path"), f = Gt("path"), p = Gt("path"), g = Gt("g"), y = Gt("path"), D = Gt("path"), T = Gt("path"), P = Gt("path"), Se(o, "d", "M255.926 0.754768L509.702 139.936V221.027L255.926 81.8465V0.754768Z"), Se(o, "fill", "#FF7C00"), Se(o, "fill-opacity", "0.4"), Se(o, "class", "svelte-43sxxs"), Se(u, "d", "M509.69 139.936L254.981 279.641V361.255L509.69 221.55V139.936Z"), Se(u, "fill", "#FF7C00"), Se(u, "class", "svelte-43sxxs"), Se(f, "d", "M0.250138 139.937L254.981 279.641V361.255L0.250138 221.55V139.937Z"), Se(f, "fill", "#FF7C00"), Se(f, "fill-opacity", "0.4"), Se(f, "class", "svelte-43sxxs"), Se(p, "d", "M255.923 0.232622L0.236328 139.936V221.55L255.923 81.8469V0.232622Z"), Se(p, "fill", "#FF7C00"), Se(p, "class", "svelte-43sxxs"), fr(i, "transform", "translate(" + /*$top*/
+      a[1][0] + "px, " + /*$top*/
+      a[1][1] + "px)"), Se(y, "d", "M255.926 141.5L509.702 280.681V361.773L255.926 222.592V141.5Z"), Se(y, "fill", "#FF7C00"), Se(y, "fill-opacity", "0.4"), Se(y, "class", "svelte-43sxxs"), Se(D, "d", "M509.69 280.679L254.981 420.384V501.998L509.69 362.293V280.679Z"), Se(D, "fill", "#FF7C00"), Se(D, "class", "svelte-43sxxs"), Se(T, "d", "M0.250138 280.681L254.981 420.386V502L0.250138 362.295V280.681Z"), Se(T, "fill", "#FF7C00"), Se(T, "fill-opacity", "0.4"), Se(T, "class", "svelte-43sxxs"), Se(P, "d", "M255.923 140.977L0.236328 280.68V362.294L255.923 222.591V140.977Z"), Se(P, "fill", "#FF7C00"), Se(P, "class", "svelte-43sxxs"), fr(g, "transform", "translate(" + /*$bottom*/
+      a[2][0] + "px, " + /*$bottom*/
+      a[2][1] + "px)"), Se(s, "viewBox", "-1200 -1200 3000 3000"), Se(s, "fill", "none"), Se(s, "xmlns", "http://www.w3.org/2000/svg"), Se(s, "class", "svelte-43sxxs"), Se(r, "class", "svelte-43sxxs"), oa(
+        r,
+        "margin",
+        /*margin*/
+        a[0]
+      );
+    },
+    m(U, K) {
+      b2(U, r, K), Ut(r, s), Ut(s, i), Ut(i, o), Ut(i, u), Ut(i, f), Ut(i, p), Ut(s, g), Ut(g, y), Ut(g, D), Ut(g, T), Ut(g, P);
+    },
+    p(U, [K]) {
+      K & /*$top*/
+      2 && fr(i, "transform", "translate(" + /*$top*/
+      U[1][0] + "px, " + /*$top*/
+      U[1][1] + "px)"), K & /*$bottom*/
+      4 && fr(g, "transform", "translate(" + /*$bottom*/
+      U[2][0] + "px, " + /*$bottom*/
+      U[2][1] + "px)"), K & /*margin*/
+      1 && oa(
+        r,
+        "margin",
+        /*margin*/
+        U[0]
+      );
+    },
+    i: aa,
+    o: aa,
+    d(U) {
+      U && m2(r);
+    }
+  };
+}
+function k2(a, r, s) {
+  let i, o, { margin: u = !0 } = r;
+  const f = ia([0, 0]);
+  la(a, f, (P) => s(1, i = P));
+  const p = ia([0, 0]);
+  la(a, p, (P) => s(2, o = P));
+  let g;
+  async function y() {
+    await Promise.all([f.set([125, 140]), p.set([-125, -140])]), await Promise.all([f.set([-125, 140]), p.set([125, -140])]), await Promise.all([f.set([-125, 0]), p.set([125, -0])]), await Promise.all([f.set([125, 0]), p.set([-125, 0])]);
+  }
+  async function D() {
+    await y(), g || D();
+  }
+  async function T() {
+    await Promise.all([f.set([125, 0]), p.set([-125, 0])]), D();
+  }
+  return y2(() => (T(), () => g = !0)), a.$$set = (P) => {
+    "margin" in P && s(0, u = P.margin);
+  }, [u, i, o, f, p];
+}
+class x2 extends d2 {
+  constructor(r) {
+    super(), g2(this, r, k2, _2, w2, { margin: 0 });
+  }
+}
+const {
+  SvelteComponent: D2,
+  append: G0,
+  attr: s0,
+  binding_callbacks: ua,
+  check_outros: Po,
+  create_component: v2,
+  create_slot: A2,
+  destroy_component: S2,
+  destroy_each: Ho,
+  detach: ge,
+  element: p0,
+  empty: mn,
+  ensure_array_like: Dr,
+  get_all_dirty_from_scope: F2,
+  get_slot_changes: E2,
+  group_outros: Uo,
+  init: C2,
+  insert: be,
+  mount_component: T2,
+  noop: Ps,
+  safe_not_equal: M2,
+  set_data: Lt,
+  set_style: B0,
+  space: i0,
+  text: Xe,
+  toggle_class: Bt,
+  transition_in: cn,
+  transition_out: hn,
+  update_slot_base: z2
+} = window.__gradio__svelte__internal, { tick: B2 } = window.__gradio__svelte__internal, { onDestroy: N2 } = window.__gradio__svelte__internal, R2 = (a) => ({}), ca = (a) => ({});
+function ha(a, r, s) {
+  const i = a.slice();
+  return i[38] = r[s], i[40] = s, i;
+}
+function fa(a, r, s) {
+  const i = a.slice();
+  return i[38] = r[s], i;
+}
+function I2(a) {
+  let r, s = (
+    /*i18n*/
+    a[1]("common.error") + ""
+  ), i, o, u;
+  const f = (
+    /*#slots*/
+    a[29].error
+  ), p = A2(
+    f,
+    a,
+    /*$$scope*/
+    a[28],
+    ca
+  );
+  return {
+    c() {
+      r = p0("span"), i = Xe(s), o = i0(), p && p.c(), s0(r, "class", "error svelte-1yserjw");
+    },
+    m(g, y) {
+      be(g, r, y), G0(r, i), be(g, o, y), p && p.m(g, y), u = !0;
+    },
+    p(g, y) {
+      (!u || y[0] & /*i18n*/
+      2) && s !== (s = /*i18n*/
+      g[1]("common.error") + "") && Lt(i, s), p && p.p && (!u || y[0] & /*$$scope*/
+      268435456) && z2(
+        p,
+        f,
+        g,
+        /*$$scope*/
+        g[28],
+        u ? E2(
+          f,
+          /*$$scope*/
+          g[28],
+          y,
+          R2
+        ) : F2(
+          /*$$scope*/
+          g[28]
+        ),
+        ca
+      );
+    },
+    i(g) {
+      u || (cn(p, g), u = !0);
+    },
+    o(g) {
+      hn(p, g), u = !1;
+    },
+    d(g) {
+      g && (ge(r), ge(o)), p && p.d(g);
+    }
+  };
+}
+function L2(a) {
+  let r, s, i, o, u, f, p, g, y, D = (
+    /*variant*/
+    a[8] === "default" && /*show_eta_bar*/
+    a[18] && /*show_progress*/
+    a[6] === "full" && da(a)
+  );
+  function T(S, M) {
+    if (
+      /*progress*/
+      S[7]
+    )
+      return P2;
+    if (
+      /*queue_position*/
+      S[2] !== null && /*queue_size*/
+      S[3] !== void 0 && /*queue_position*/
+      S[2] >= 0
+    )
+      return q2;
+    if (
+      /*queue_position*/
+      S[2] === 0
+    )
+      return O2;
+  }
+  let P = T(a), U = P && P(a), K = (
+    /*timer*/
+    a[5] && ga(a)
+  );
+  const ee = [V2, G2], Z = [];
+  function R(S, M) {
+    return (
+      /*last_progress_level*/
+      S[15] != null ? 0 : (
+        /*show_progress*/
+        S[6] === "full" ? 1 : -1
+      )
+    );
+  }
+  ~(u = R(a)) && (f = Z[u] = ee[u](a));
+  let N = !/*timer*/
+  a[5] && Da(a);
+  return {
+    c() {
+      D && D.c(), r = i0(), s = p0("div"), U && U.c(), i = i0(), K && K.c(), o = i0(), f && f.c(), p = i0(), N && N.c(), g = mn(), s0(s, "class", "progress-text svelte-1yserjw"), Bt(
+        s,
+        "meta-text-center",
+        /*variant*/
+        a[8] === "center"
+      ), Bt(
+        s,
+        "meta-text",
+        /*variant*/
+        a[8] === "default"
+      );
+    },
+    m(S, M) {
+      D && D.m(S, M), be(S, r, M), be(S, s, M), U && U.m(s, null), G0(s, i), K && K.m(s, null), be(S, o, M), ~u && Z[u].m(S, M), be(S, p, M), N && N.m(S, M), be(S, g, M), y = !0;
+    },
+    p(S, M) {
+      /*variant*/
+      S[8] === "default" && /*show_eta_bar*/
+      S[18] && /*show_progress*/
+      S[6] === "full" ? D ? D.p(S, M) : (D = da(S), D.c(), D.m(r.parentNode, r)) : D && (D.d(1), D = null), P === (P = T(S)) && U ? U.p(S, M) : (U && U.d(1), U = P && P(S), U && (U.c(), U.m(s, i))), /*timer*/
+      S[5] ? K ? K.p(S, M) : (K = ga(S), K.c(), K.m(s, null)) : K && (K.d(1), K = null), (!y || M[0] & /*variant*/
+      256) && Bt(
+        s,
+        "meta-text-center",
+        /*variant*/
+        S[8] === "center"
+      ), (!y || M[0] & /*variant*/
+      256) && Bt(
+        s,
+        "meta-text",
+        /*variant*/
+        S[8] === "default"
+      );
+      let L = u;
+      u = R(S), u === L ? ~u && Z[u].p(S, M) : (f && (Uo(), hn(Z[L], 1, 1, () => {
+        Z[L] = null;
+      }), Po()), ~u ? (f = Z[u], f ? f.p(S, M) : (f = Z[u] = ee[u](S), f.c()), cn(f, 1), f.m(p.parentNode, p)) : f = null), /*timer*/
+      S[5] ? N && (N.d(1), N = null) : N ? N.p(S, M) : (N = Da(S), N.c(), N.m(g.parentNode, g));
+    },
+    i(S) {
+      y || (cn(f), y = !0);
+    },
+    o(S) {
+      hn(f), y = !1;
+    },
+    d(S) {
+      S && (ge(r), ge(s), ge(o), ge(p), ge(g)), D && D.d(S), U && U.d(), K && K.d(), ~u && Z[u].d(S), N && N.d(S);
+    }
+  };
+}
+function da(a) {
+  let r, s = `translateX(${/*eta_level*/
+  (a[17] || 0) * 100 - 100}%)`;
+  return {
+    c() {
+      r = p0("div"), s0(r, "class", "eta-bar svelte-1yserjw"), B0(r, "transform", s);
+    },
+    m(i, o) {
+      be(i, r, o);
+    },
+    p(i, o) {
+      o[0] & /*eta_level*/
+      131072 && s !== (s = `translateX(${/*eta_level*/
+      (i[17] || 0) * 100 - 100}%)`) && B0(r, "transform", s);
+    },
+    d(i) {
+      i && ge(r);
+    }
+  };
+}
+function O2(a) {
+  let r;
+  return {
+    c() {
+      r = Xe("processing |");
+    },
+    m(s, i) {
+      be(s, r, i);
+    },
+    p: Ps,
+    d(s) {
+      s && ge(r);
+    }
+  };
+}
+function q2(a) {
+  let r, s = (
+    /*queue_position*/
+    a[2] + 1 + ""
+  ), i, o, u, f;
+  return {
+    c() {
+      r = Xe("queue: "), i = Xe(s), o = Xe("/"), u = Xe(
+        /*queue_size*/
+        a[3]
+      ), f = Xe(" |");
+    },
+    m(p, g) {
+      be(p, r, g), be(p, i, g), be(p, o, g), be(p, u, g), be(p, f, g);
+    },
+    p(p, g) {
+      g[0] & /*queue_position*/
+      4 && s !== (s = /*queue_position*/
+      p[2] + 1 + "") && Lt(i, s), g[0] & /*queue_size*/
+      8 && Lt(
+        u,
+        /*queue_size*/
+        p[3]
+      );
+    },
+    d(p) {
+      p && (ge(r), ge(i), ge(o), ge(u), ge(f));
+    }
+  };
+}
+function P2(a) {
+  let r, s = Dr(
+    /*progress*/
+    a[7]
+  ), i = [];
+  for (let o = 0; o < s.length; o += 1)
+    i[o] = pa(fa(a, s, o));
+  return {
+    c() {
+      for (let o = 0; o < i.length; o += 1)
+        i[o].c();
+      r = mn();
+    },
+    m(o, u) {
+      for (let f = 0; f < i.length; f += 1)
+        i[f] && i[f].m(o, u);
+      be(o, r, u);
+    },
+    p(o, u) {
+      if (u[0] & /*progress*/
+      128) {
+        s = Dr(
+          /*progress*/
+          o[7]
+        );
+        let f;
+        for (f = 0; f < s.length; f += 1) {
+          const p = fa(o, s, f);
+          i[f] ? i[f].p(p, u) : (i[f] = pa(p), i[f].c(), i[f].m(r.parentNode, r));
+        }
+        for (; f < i.length; f += 1)
+          i[f].d(1);
+        i.length = s.length;
+      }
+    },
+    d(o) {
+      o && ge(r), Ho(i, o);
+    }
+  };
+}
+function ma(a) {
+  let r, s = (
+    /*p*/
+    a[38].unit + ""
+  ), i, o, u = " ", f;
+  function p(D, T) {
+    return (
+      /*p*/
+      D[38].length != null ? U2 : H2
+    );
+  }
+  let g = p(a), y = g(a);
+  return {
+    c() {
+      y.c(), r = i0(), i = Xe(s), o = Xe(" | "), f = Xe(u);
+    },
+    m(D, T) {
+      y.m(D, T), be(D, r, T), be(D, i, T), be(D, o, T), be(D, f, T);
+    },
+    p(D, T) {
+      g === (g = p(D)) && y ? y.p(D, T) : (y.d(1), y = g(D), y && (y.c(), y.m(r.parentNode, r))), T[0] & /*progress*/
+      128 && s !== (s = /*p*/
+      D[38].unit + "") && Lt(i, s);
+    },
+    d(D) {
+      D && (ge(r), ge(i), ge(o), ge(f)), y.d(D);
+    }
+  };
+}
+function H2(a) {
+  let r = an(
+    /*p*/
+    a[38].index || 0
+  ) + "", s;
+  return {
+    c() {
+      s = Xe(r);
+    },
+    m(i, o) {
+      be(i, s, o);
+    },
+    p(i, o) {
+      o[0] & /*progress*/
+      128 && r !== (r = an(
+        /*p*/
+        i[38].index || 0
+      ) + "") && Lt(s, r);
+    },
+    d(i) {
+      i && ge(s);
+    }
+  };
+}
+function U2(a) {
+  let r = an(
+    /*p*/
+    a[38].index || 0
+  ) + "", s, i, o = an(
+    /*p*/
+    a[38].length
+  ) + "", u;
+  return {
+    c() {
+      s = Xe(r), i = Xe("/"), u = Xe(o);
+    },
+    m(f, p) {
+      be(f, s, p), be(f, i, p), be(f, u, p);
+    },
+    p(f, p) {
+      p[0] & /*progress*/
+      128 && r !== (r = an(
+        /*p*/
+        f[38].index || 0
+      ) + "") && Lt(s, r), p[0] & /*progress*/
+      128 && o !== (o = an(
+        /*p*/
+        f[38].length
+      ) + "") && Lt(u, o);
+    },
+    d(f) {
+      f && (ge(s), ge(i), ge(u));
+    }
+  };
+}
+function pa(a) {
+  let r, s = (
+    /*p*/
+    a[38].index != null && ma(a)
+  );
+  return {
+    c() {
+      s && s.c(), r = mn();
+    },
+    m(i, o) {
+      s && s.m(i, o), be(i, r, o);
+    },
+    p(i, o) {
+      /*p*/
+      i[38].index != null ? s ? s.p(i, o) : (s = ma(i), s.c(), s.m(r.parentNode, r)) : s && (s.d(1), s = null);
+    },
+    d(i) {
+      i && ge(r), s && s.d(i);
+    }
+  };
+}
+function ga(a) {
+  let r, s = (
+    /*eta*/
+    a[0] ? `/${/*formatted_eta*/
+    a[19]}` : ""
+  ), i, o;
+  return {
+    c() {
+      r = Xe(
+        /*formatted_timer*/
+        a[20]
+      ), i = Xe(s), o = Xe("s");
+    },
+    m(u, f) {
+      be(u, r, f), be(u, i, f), be(u, o, f);
+    },
+    p(u, f) {
+      f[0] & /*formatted_timer*/
+      1048576 && Lt(
+        r,
+        /*formatted_timer*/
+        u[20]
+      ), f[0] & /*eta, formatted_eta*/
+      524289 && s !== (s = /*eta*/
+      u[0] ? `/${/*formatted_eta*/
+      u[19]}` : "") && Lt(i, s);
+    },
+    d(u) {
+      u && (ge(r), ge(i), ge(o));
+    }
+  };
+}
+function G2(a) {
+  let r, s;
+  return r = new x2({
+    props: { margin: (
+      /*variant*/
+      a[8] === "default"
+    ) }
+  }), {
+    c() {
+      v2(r.$$.fragment);
+    },
+    m(i, o) {
+      T2(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*variant*/
+      256 && (u.margin = /*variant*/
+      i[8] === "default"), r.$set(u);
+    },
+    i(i) {
+      s || (cn(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      hn(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      S2(r, i);
+    }
+  };
+}
+function V2(a) {
+  let r, s, i, o, u, f = `${/*last_progress_level*/
+  a[15] * 100}%`, p = (
+    /*progress*/
+    a[7] != null && ba(a)
+  );
+  return {
+    c() {
+      r = p0("div"), s = p0("div"), p && p.c(), i = i0(), o = p0("div"), u = p0("div"), s0(s, "class", "progress-level-inner svelte-1yserjw"), s0(u, "class", "progress-bar svelte-1yserjw"), B0(u, "width", f), s0(o, "class", "progress-bar-wrap svelte-1yserjw"), s0(r, "class", "progress-level svelte-1yserjw");
+    },
+    m(g, y) {
+      be(g, r, y), G0(r, s), p && p.m(s, null), G0(r, i), G0(r, o), G0(o, u), a[30](u);
+    },
+    p(g, y) {
+      /*progress*/
+      g[7] != null ? p ? p.p(g, y) : (p = ba(g), p.c(), p.m(s, null)) : p && (p.d(1), p = null), y[0] & /*last_progress_level*/
+      32768 && f !== (f = `${/*last_progress_level*/
+      g[15] * 100}%`) && B0(u, "width", f);
+    },
+    i: Ps,
+    o: Ps,
+    d(g) {
+      g && ge(r), p && p.d(), a[30](null);
+    }
+  };
+}
+function ba(a) {
+  let r, s = Dr(
+    /*progress*/
+    a[7]
+  ), i = [];
+  for (let o = 0; o < s.length; o += 1)
+    i[o] = xa(ha(a, s, o));
+  return {
+    c() {
+      for (let o = 0; o < i.length; o += 1)
+        i[o].c();
+      r = mn();
+    },
+    m(o, u) {
+      for (let f = 0; f < i.length; f += 1)
+        i[f] && i[f].m(o, u);
+      be(o, r, u);
+    },
+    p(o, u) {
+      if (u[0] & /*progress_level, progress*/
+      16512) {
+        s = Dr(
+          /*progress*/
+          o[7]
+        );
+        let f;
+        for (f = 0; f < s.length; f += 1) {
+          const p = ha(o, s, f);
+          i[f] ? i[f].p(p, u) : (i[f] = xa(p), i[f].c(), i[f].m(r.parentNode, r));
+        }
+        for (; f < i.length; f += 1)
+          i[f].d(1);
+        i.length = s.length;
+      }
+    },
+    d(o) {
+      o && ge(r), Ho(i, o);
+    }
+  };
+}
+function wa(a) {
+  let r, s, i, o, u = (
+    /*i*/
+    a[40] !== 0 && W2()
+  ), f = (
+    /*p*/
+    a[38].desc != null && ya(a)
+  ), p = (
+    /*p*/
+    a[38].desc != null && /*progress_level*/
+    a[14] && /*progress_level*/
+    a[14][
+      /*i*/
+      a[40]
+    ] != null && _a()
+  ), g = (
+    /*progress_level*/
+    a[14] != null && ka(a)
+  );
+  return {
+    c() {
+      u && u.c(), r = i0(), f && f.c(), s = i0(), p && p.c(), i = i0(), g && g.c(), o = mn();
+    },
+    m(y, D) {
+      u && u.m(y, D), be(y, r, D), f && f.m(y, D), be(y, s, D), p && p.m(y, D), be(y, i, D), g && g.m(y, D), be(y, o, D);
+    },
+    p(y, D) {
+      /*p*/
+      y[38].desc != null ? f ? f.p(y, D) : (f = ya(y), f.c(), f.m(s.parentNode, s)) : f && (f.d(1), f = null), /*p*/
+      y[38].desc != null && /*progress_level*/
+      y[14] && /*progress_level*/
+      y[14][
+        /*i*/
+        y[40]
+      ] != null ? p || (p = _a(), p.c(), p.m(i.parentNode, i)) : p && (p.d(1), p = null), /*progress_level*/
+      y[14] != null ? g ? g.p(y, D) : (g = ka(y), g.c(), g.m(o.parentNode, o)) : g && (g.d(1), g = null);
+    },
+    d(y) {
+      y && (ge(r), ge(s), ge(i), ge(o)), u && u.d(y), f && f.d(y), p && p.d(y), g && g.d(y);
+    }
+  };
+}
+function W2(a) {
+  let r;
+  return {
+    c() {
+      r = Xe(" /");
+    },
+    m(s, i) {
+      be(s, r, i);
+    },
+    d(s) {
+      s && ge(r);
+    }
+  };
+}
+function ya(a) {
+  let r = (
+    /*p*/
+    a[38].desc + ""
+  ), s;
+  return {
+    c() {
+      s = Xe(r);
+    },
+    m(i, o) {
+      be(i, s, o);
+    },
+    p(i, o) {
+      o[0] & /*progress*/
+      128 && r !== (r = /*p*/
+      i[38].desc + "") && Lt(s, r);
+    },
+    d(i) {
+      i && ge(s);
+    }
+  };
+}
+function _a(a) {
+  let r;
+  return {
+    c() {
+      r = Xe("-");
+    },
+    m(s, i) {
+      be(s, r, i);
+    },
+    d(s) {
+      s && ge(r);
+    }
+  };
+}
+function ka(a) {
+  let r = (100 * /*progress_level*/
+  (a[14][
+    /*i*/
+    a[40]
+  ] || 0)).toFixed(1) + "", s, i;
+  return {
+    c() {
+      s = Xe(r), i = Xe("%");
+    },
+    m(o, u) {
+      be(o, s, u), be(o, i, u);
+    },
+    p(o, u) {
+      u[0] & /*progress_level*/
+      16384 && r !== (r = (100 * /*progress_level*/
+      (o[14][
+        /*i*/
+        o[40]
+      ] || 0)).toFixed(1) + "") && Lt(s, r);
+    },
+    d(o) {
+      o && (ge(s), ge(i));
+    }
+  };
+}
+function xa(a) {
+  let r, s = (
+    /*p*/
+    (a[38].desc != null || /*progress_level*/
+    a[14] && /*progress_level*/
+    a[14][
+      /*i*/
+      a[40]
+    ] != null) && wa(a)
+  );
+  return {
+    c() {
+      s && s.c(), r = mn();
+    },
+    m(i, o) {
+      s && s.m(i, o), be(i, r, o);
+    },
+    p(i, o) {
+      /*p*/
+      i[38].desc != null || /*progress_level*/
+      i[14] && /*progress_level*/
+      i[14][
+        /*i*/
+        i[40]
+      ] != null ? s ? s.p(i, o) : (s = wa(i), s.c(), s.m(r.parentNode, r)) : s && (s.d(1), s = null);
+    },
+    d(i) {
+      i && ge(r), s && s.d(i);
+    }
+  };
+}
+function Da(a) {
+  let r, s;
+  return {
+    c() {
+      r = p0("p"), s = Xe(
+        /*loading_text*/
+        a[9]
+      ), s0(r, "class", "loading svelte-1yserjw");
+    },
+    m(i, o) {
+      be(i, r, o), G0(r, s);
+    },
+    p(i, o) {
+      o[0] & /*loading_text*/
+      512 && Lt(
+        s,
+        /*loading_text*/
+        i[9]
+      );
+    },
+    d(i) {
+      i && ge(r);
+    }
+  };
+}
+function j2(a) {
+  let r, s, i, o, u;
+  const f = [L2, I2], p = [];
+  function g(y, D) {
+    return (
+      /*status*/
+      y[4] === "pending" ? 0 : (
+        /*status*/
+        y[4] === "error" ? 1 : -1
+      )
+    );
+  }
+  return ~(s = g(a)) && (i = p[s] = f[s](a)), {
+    c() {
+      r = p0("div"), i && i.c(), s0(r, "class", o = "wrap " + /*variant*/
+      a[8] + " " + /*show_progress*/
+      a[6] + " svelte-1yserjw"), Bt(r, "hide", !/*status*/
+      a[4] || /*status*/
+      a[4] === "complete" || /*show_progress*/
+      a[6] === "hidden"), Bt(
+        r,
+        "translucent",
+        /*variant*/
+        a[8] === "center" && /*status*/
+        (a[4] === "pending" || /*status*/
+        a[4] === "error") || /*translucent*/
+        a[11] || /*show_progress*/
+        a[6] === "minimal"
+      ), Bt(
+        r,
+        "generating",
+        /*status*/
+        a[4] === "generating"
+      ), Bt(
+        r,
+        "border",
+        /*border*/
+        a[12]
+      ), B0(
+        r,
+        "position",
+        /*absolute*/
+        a[10] ? "absolute" : "static"
+      ), B0(
+        r,
+        "padding",
+        /*absolute*/
+        a[10] ? "0" : "var(--size-8) 0"
+      );
+    },
+    m(y, D) {
+      be(y, r, D), ~s && p[s].m(r, null), a[31](r), u = !0;
+    },
+    p(y, D) {
+      let T = s;
+      s = g(y), s === T ? ~s && p[s].p(y, D) : (i && (Uo(), hn(p[T], 1, 1, () => {
+        p[T] = null;
+      }), Po()), ~s ? (i = p[s], i ? i.p(y, D) : (i = p[s] = f[s](y), i.c()), cn(i, 1), i.m(r, null)) : i = null), (!u || D[0] & /*variant, show_progress*/
+      320 && o !== (o = "wrap " + /*variant*/
+      y[8] + " " + /*show_progress*/
+      y[6] + " svelte-1yserjw")) && s0(r, "class", o), (!u || D[0] & /*variant, show_progress, status, show_progress*/
+      336) && Bt(r, "hide", !/*status*/
+      y[4] || /*status*/
+      y[4] === "complete" || /*show_progress*/
+      y[6] === "hidden"), (!u || D[0] & /*variant, show_progress, variant, status, translucent, show_progress*/
+      2384) && Bt(
+        r,
+        "translucent",
+        /*variant*/
+        y[8] === "center" && /*status*/
+        (y[4] === "pending" || /*status*/
+        y[4] === "error") || /*translucent*/
+        y[11] || /*show_progress*/
+        y[6] === "minimal"
+      ), (!u || D[0] & /*variant, show_progress, status*/
+      336) && Bt(
+        r,
+        "generating",
+        /*status*/
+        y[4] === "generating"
+      ), (!u || D[0] & /*variant, show_progress, border*/
+      4416) && Bt(
+        r,
+        "border",
+        /*border*/
+        y[12]
+      ), D[0] & /*absolute*/
+      1024 && B0(
+        r,
+        "position",
+        /*absolute*/
+        y[10] ? "absolute" : "static"
+      ), D[0] & /*absolute*/
+      1024 && B0(
+        r,
+        "padding",
+        /*absolute*/
+        y[10] ? "0" : "var(--size-8) 0"
+      );
+    },
+    i(y) {
+      u || (cn(i), u = !0);
+    },
+    o(y) {
+      hn(i), u = !1;
+    },
+    d(y) {
+      y && ge(r), ~s && p[s].d(), a[31](null);
+    }
+  };
+}
+let dr = [], Es = !1;
+async function X2(a, r = !0) {
+  if (!(window.__gradio_mode__ === "website" || window.__gradio_mode__ !== "app" && r !== !0)) {
+    if (dr.push(a), !Es)
+      Es = !0;
+    else
+      return;
+    await B2(), requestAnimationFrame(() => {
+      let s = [0, 0];
+      for (let i = 0; i < dr.length; i++) {
+        const u = dr[i].getBoundingClientRect();
+        (i === 0 || u.top + window.scrollY <= s[0]) && (s[0] = u.top + window.scrollY, s[1] = i);
+      }
+      window.scrollTo({ top: s[0] - 20, behavior: "smooth" }), Es = !1, dr = [];
+    });
+  }
+}
+function Y2(a, r, s) {
+  let i, { $$slots: o = {}, $$scope: u } = r, { i18n: f } = r, { eta: p = null } = r, { queue_position: g } = r, { queue_size: y } = r, { status: D } = r, { scroll_to_output: T = !1 } = r, { timer: P = !0 } = r, { show_progress: U = "full" } = r, { message: K = null } = r, { progress: ee = null } = r, { variant: Z = "default" } = r, { loading_text: R = "Loading..." } = r, { absolute: N = !0 } = r, { translucent: S = !1 } = r, { border: M = !1 } = r, { autoscroll: L } = r, z, H = !1, te = 0, Q = 0, ce = null, oe = null, Ce = 0, ke = null, Pe, et = null, vt = !0;
+  const mt = () => {
+    s(0, p = s(26, ce = s(19, _e = null))), s(24, te = performance.now()), s(25, Q = 0), H = !0, Be();
+  };
+  function Be() {
+    requestAnimationFrame(() => {
+      s(25, Q = (performance.now() - te) / 1e3), H && Be();
+    });
+  }
+  function J() {
+    s(25, Q = 0), s(0, p = s(26, ce = s(19, _e = null))), H && (H = !1);
+  }
+  N2(() => {
+    H && J();
+  });
+  let _e = null;
+  function ae(ie) {
+    ua[ie ? "unshift" : "push"](() => {
+      et = ie, s(16, et), s(7, ee), s(14, ke), s(15, Pe);
+    });
+  }
+  function X(ie) {
+    ua[ie ? "unshift" : "push"](() => {
+      z = ie, s(13, z);
+    });
+  }
+  return a.$$set = (ie) => {
+    "i18n" in ie && s(1, f = ie.i18n), "eta" in ie && s(0, p = ie.eta), "queue_position" in ie && s(2, g = ie.queue_position), "queue_size" in ie && s(3, y = ie.queue_size), "status" in ie && s(4, D = ie.status), "scroll_to_output" in ie && s(21, T = ie.scroll_to_output), "timer" in ie && s(5, P = ie.timer), "show_progress" in ie && s(6, U = ie.show_progress), "message" in ie && s(22, K = ie.message), "progress" in ie && s(7, ee = ie.progress), "variant" in ie && s(8, Z = ie.variant), "loading_text" in ie && s(9, R = ie.loading_text), "absolute" in ie && s(10, N = ie.absolute), "translucent" in ie && s(11, S = ie.translucent), "border" in ie && s(12, M = ie.border), "autoscroll" in ie && s(23, L = ie.autoscroll), "$$scope" in ie && s(28, u = ie.$$scope);
+  }, a.$$.update = () => {
+    a.$$.dirty[0] & /*eta, old_eta, timer_start, eta_from_start*/
+    218103809 && (p === null && s(0, p = ce), p != null && ce !== p && (s(27, oe = (performance.now() - te) / 1e3 + p), s(19, _e = oe.toFixed(1)), s(26, ce = p))), a.$$.dirty[0] & /*eta_from_start, timer_diff*/
+    167772160 && s(17, Ce = oe === null || oe <= 0 || !Q ? null : Math.min(Q / oe, 1)), a.$$.dirty[0] & /*progress*/
+    128 && ee != null && s(18, vt = !1), a.$$.dirty[0] & /*progress, progress_level, progress_bar, last_progress_level*/
+    114816 && (ee != null ? s(14, ke = ee.map((ie) => {
+      if (ie.index != null && ie.length != null)
+        return ie.index / ie.length;
+      if (ie.progress != null)
+        return ie.progress;
+    })) : s(14, ke = null), ke ? (s(15, Pe = ke[ke.length - 1]), et && (Pe === 0 ? s(16, et.style.transition = "0", et) : s(16, et.style.transition = "150ms", et))) : s(15, Pe = void 0)), a.$$.dirty[0] & /*status*/
+    16 && (D === "pending" ? mt() : J()), a.$$.dirty[0] & /*el, scroll_to_output, status, autoscroll*/
+    10493968 && z && T && (D === "pending" || D === "complete") && X2(z, L), a.$$.dirty[0] & /*status, message*/
+    4194320, a.$$.dirty[0] & /*timer_diff*/
+    33554432 && s(20, i = Q.toFixed(1));
+  }, [
+    p,
+    f,
+    g,
+    y,
+    D,
+    P,
+    U,
+    ee,
+    Z,
+    R,
+    N,
+    S,
+    M,
+    z,
+    ke,
+    Pe,
+    et,
+    Ce,
+    vt,
+    _e,
+    i,
+    T,
+    K,
+    L,
+    te,
+    Q,
+    ce,
+    oe,
+    u,
+    o,
+    ae,
+    X
+  ];
+}
+class Z2 extends D2 {
+  constructor(r) {
+    super(), C2(
+      this,
+      r,
+      Y2,
+      j2,
+      M2,
+      {
+        i18n: 1,
+        eta: 0,
+        queue_position: 2,
+        queue_size: 3,
+        status: 4,
+        scroll_to_output: 21,
+        timer: 5,
+        show_progress: 6,
+        message: 22,
+        progress: 7,
+        variant: 8,
+        loading_text: 9,
+        absolute: 10,
+        translucent: 11,
+        border: 12,
+        autoscroll: 23
+      },
+      null,
+      [-1, -1]
+    );
+  }
+}
+new Intl.Collator(0, { numeric: 1 }).compare;
+const {
+  SvelteComponent: K2,
+  append: Q2,
+  attr: mr,
+  check_outros: va,
+  create_component: Go,
+  destroy_component: Vo,
+  detach: J2,
+  element: $2,
+  group_outros: Aa,
+  init: ef,
+  insert: tf,
+  listen: nf,
+  mount_component: Wo,
+  safe_not_equal: rf,
+  space: sf,
+  transition_in: M0,
+  transition_out: on
+} = window.__gradio__svelte__internal, { onDestroy: lf } = window.__gradio__svelte__internal;
+function Sa(a) {
+  let r, s;
+  return r = new Bc({}), {
+    c() {
+      Go(r.$$.fragment);
+    },
+    m(i, o) {
+      Wo(r, i, o), s = !0;
+    },
+    i(i) {
+      s || (M0(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      on(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Vo(r, i);
+    }
+  };
+}
+function Fa(a) {
+  let r, s;
+  return r = new wc({}), {
+    c() {
+      Go(r.$$.fragment);
+    },
+    m(i, o) {
+      Wo(r, i, o), s = !0;
+    },
+    i(i) {
+      s || (M0(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      on(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Vo(r, i);
+    }
+  };
+}
+function af(a) {
+  let r, s, i, o, u, f, p = !/*copied*/
+  a[0] && Sa(), g = (
+    /*copied*/
+    a[0] && Fa()
+  );
+  return {
+    c() {
+      r = $2("button"), p && p.c(), s = sf(), g && g.c(), mr(r, "class", "action svelte-1qsp0z8"), mr(r, "title", "copy"), mr(r, "aria-label", i = /*copied*/
+      a[0] ? "Copied message" : "Copy message");
+    },
+    m(y, D) {
+      tf(y, r, D), p && p.m(r, null), Q2(r, s), g && g.m(r, null), o = !0, u || (f = nf(
+        r,
+        "click",
+        /*handle_copy*/
+        a[1]
+      ), u = !0);
+    },
+    p(y, [D]) {
+      /*copied*/
+      y[0] ? p && (Aa(), on(p, 1, 1, () => {
+        p = null;
+      }), va()) : p ? D & /*copied*/
+      1 && M0(p, 1) : (p = Sa(), p.c(), M0(p, 1), p.m(r, s)), /*copied*/
+      y[0] ? g ? D & /*copied*/
+      1 && M0(g, 1) : (g = Fa(), g.c(), M0(g, 1), g.m(r, null)) : g && (Aa(), on(g, 1, 1, () => {
+        g = null;
+      }), va()), (!o || D & /*copied*/
+      1 && i !== (i = /*copied*/
+      y[0] ? "Copied message" : "Copy message")) && mr(r, "aria-label", i);
+    },
+    i(y) {
+      o || (M0(p), M0(g), o = !0);
+    },
+    o(y) {
+      on(p), on(g), o = !1;
+    },
+    d(y) {
+      y && J2(r), p && p.d(), g && g.d(), u = !1, f();
+    }
+  };
+}
+function of(a, r, s) {
+  let i = !1, { value: o } = r, u;
+  function f() {
+    s(0, i = !0), u && clearTimeout(u), u = setTimeout(
+      () => {
+        s(0, i = !1);
+      },
+      2e3
+    );
+  }
+  async function p() {
+    if ("clipboard" in navigator)
+      await navigator.clipboard.writeText(o), f();
+    else {
+      const g = document.createElement("textarea");
+      g.value = o, g.style.position = "absolute", g.style.left = "-999999px", document.body.prepend(g), g.select();
+      try {
+        document.execCommand("copy"), f();
+      } catch (y) {
+        console.error(y);
+      } finally {
+        g.remove();
+      }
+    }
+  }
+  return lf(() => {
+    u && clearTimeout(u);
+  }), a.$$set = (g) => {
+    "value" in g && s(2, o = g.value);
+  }, [i, p, o];
+}
+class uf extends K2 {
+  constructor(r) {
+    super(), ef(this, r, of, af, rf, { value: 2 });
+  }
+}
+const {
+  SvelteComponent: cf,
+  attr: ln,
+  create_component: Ea,
+  destroy_component: Ca,
+  detach: Cs,
+  element: Ta,
+  init: hf,
+  insert: Ts,
+  listen: Ma,
+  mount_component: za,
+  run_all: ff,
+  safe_not_equal: df,
+  space: mf,
+  transition_in: Ba,
+  transition_out: Na
+} = window.__gradio__svelte__internal;
+function pf(a) {
+  let r, s, i, o, u, f, p, g, y, D;
+  return s = new Zc({
+    props: { selected: (
+      /*selected*/
+      a[1] === "like"
+    ) }
+  }), f = new Hc({
+    props: {
+      selected: (
+        /*selected*/
+        a[1] === "dislike"
+      )
+    }
+  }), {
+    c() {
+      r = Ta("button"), Ea(s.$$.fragment), o = mf(), u = Ta("button"), Ea(f.$$.fragment), ln(r, "aria-label", i = /*selected*/
+      a[1] === "like" ? "clicked like" : "like"), ln(r, "class", "svelte-1nphhme"), ln(u, "aria-label", p = /*selected*/
+      a[1] === "dislike" ? "clicked dislike" : "dislike"), ln(u, "class", "svelte-1nphhme");
+    },
+    m(T, P) {
+      Ts(T, r, P), za(s, r, null), Ts(T, o, P), Ts(T, u, P), za(f, u, null), g = !0, y || (D = [
+        Ma(
+          r,
+          "click",
+          /*click_handler*/
+          a[2]
+        ),
+        Ma(
+          u,
+          "click",
+          /*click_handler_1*/
+          a[3]
+        )
+      ], y = !0);
+    },
+    p(T, [P]) {
+      const U = {};
+      P & /*selected*/
+      2 && (U.selected = /*selected*/
+      T[1] === "like"), s.$set(U), (!g || P & /*selected*/
+      2 && i !== (i = /*selected*/
+      T[1] === "like" ? "clicked like" : "like")) && ln(r, "aria-label", i);
+      const K = {};
+      P & /*selected*/
+      2 && (K.selected = /*selected*/
+      T[1] === "dislike"), f.$set(K), (!g || P & /*selected*/
+      2 && p !== (p = /*selected*/
+      T[1] === "dislike" ? "clicked dislike" : "dislike")) && ln(u, "aria-label", p);
+    },
+    i(T) {
+      g || (Ba(s.$$.fragment, T), Ba(f.$$.fragment, T), g = !0);
+    },
+    o(T) {
+      Na(s.$$.fragment, T), Na(f.$$.fragment, T), g = !1;
+    },
+    d(T) {
+      T && (Cs(r), Cs(o), Cs(u)), Ca(s), Ca(f), y = !1, ff(D);
+    }
+  };
+}
+function gf(a, r, s) {
+  let { handle_action: i } = r, o = null;
+  const u = () => {
+    s(1, o = "like"), i(o);
+  }, f = () => {
+    s(1, o = "dislike"), i(o);
+  };
+  return a.$$set = (p) => {
+    "handle_action" in p && s(0, i = p.handle_action);
+  }, [i, o, u, f];
+}
+class bf extends cf {
+  constructor(r) {
+    super(), hf(this, r, gf, pf, df, { handle_action: 0 });
+  }
+}
+const {
+  SvelteComponent: wf,
+  attr: pr,
+  detach: yf,
+  element: _f,
+  init: kf,
+  insert: xf,
+  noop: Ra,
+  safe_not_equal: Df,
+  set_style: Ia
+} = window.__gradio__svelte__internal;
+function vf(a) {
+  let r;
+  return {
+    c() {
+      r = _f("div"), r.innerHTML = `<span class="sr-only">Loading content</span> <div class="dot-flashing svelte-1pwlswb"></div>
+	 
+	<div class="dot-flashing svelte-1pwlswb"></div>
+	 
+	<div class="dot-flashing svelte-1pwlswb"></div>`, pr(r, "class", "message pending svelte-1pwlswb"), pr(r, "role", "status"), pr(r, "aria-label", "Loading response"), pr(r, "aria-live", "polite"), Ia(
+        r,
+        "border-radius",
+        /*layout*/
+        a[0] === "bubble" ? "var(--radius-xxl)" : "none"
+      );
+    },
+    m(s, i) {
+      xf(s, r, i);
+    },
+    p(s, [i]) {
+      i & /*layout*/
+      1 && Ia(
+        r,
+        "border-radius",
+        /*layout*/
+        s[0] === "bubble" ? "var(--radius-xxl)" : "none"
+      );
+    },
+    i: Ra,
+    o: Ra,
+    d(s) {
+      s && yf(r);
+    }
+  };
+}
+function Af(a, r, s) {
+  let { layout: i = "bubble" } = r;
+  return a.$$set = (o) => {
+    "layout" in o && s(0, i = o.layout);
+  }, [i];
+}
+class jo extends wf {
+  constructor(r) {
+    super(), kf(this, r, Af, vf, Df, { layout: 0 });
+  }
+}
+const {
+  SvelteComponent: Sf,
+  action_destroyer: Ff,
+  append: t0,
+  attr: de,
+  binding_callbacks: Ef,
+  bubble: T0,
+  check_outros: Nt,
+  create_component: X0,
+  destroy_component: Y0,
+  destroy_each: Ks,
+  detach: ct,
+  element: xt,
+  empty: Sr,
+  ensure_array_like: fn,
+  group_outros: Rt,
+  init: Cf,
+  insert: ht,
+  listen: N0,
+  mount_component: Z0,
+  noop: R0,
+  null_to_empty: La,
+  run_all: Qs,
+  safe_not_equal: Tf,
+  set_data: Mf,
+  set_style: Cn,
+  space: V0,
+  src_url_equal: dn,
+  text: zf,
+  toggle_class: Ke,
+  transition_in: me,
+  transition_out: Ee
+} = window.__gradio__svelte__internal, { beforeUpdate: Bf, afterUpdate: Nf, createEventDispatcher: Rf } = window.__gradio__svelte__internal;
+function Oa(a, r, s) {
+  const i = a.slice();
+  return i[35] = r[s], i[37] = s, i;
+}
+function qa(a, r, s) {
+  const i = a.slice();
+  return i[38] = r[s], i[40] = s, i;
+}
+function Pa(a, r, s) {
+  const i = a.slice();
+  return i[41] = r[s], i[43] = s, i;
+}
+function Ha(a) {
+  let r, s, i;
+  return s = new a4({
+    props: {
+      i18n: (
+        /*i18n*/
+        a[13]
+      ),
+      formatter: u1,
+      value: (
+        /*value*/
+        a[0]
+      )
+    }
+  }), s.$on(
+    "error",
+    /*error_handler*/
+    a[27]
+  ), s.$on(
+    "share",
+    /*share_handler*/
+    a[28]
+  ), {
+    c() {
+      r = xt("div"), X0(s.$$.fragment), de(r, "class", "share-button svelte-10ymup0");
+    },
+    m(o, u) {
+      ht(o, r, u), Z0(s, r, null), i = !0;
+    },
+    p(o, u) {
+      const f = {};
+      u[0] & /*i18n*/
+      8192 && (f.i18n = /*i18n*/
+      o[13]), u[0] & /*value*/
+      1 && (f.value = /*value*/
+      o[0]), s.$set(f);
+    },
+    i(o) {
+      i || (me(s.$$.fragment, o), i = !0);
+    },
+    o(o) {
+      Ee(s.$$.fragment, o), i = !1;
+    },
+    d(o) {
+      o && ct(r), Y0(s);
+    }
+  };
+}
+function Ua(a) {
+  let r, s, i, o = fn(
+    /*value*/
+    a[0]
+  ), u = [];
+  for (let g = 0; g < o.length; g += 1)
+    u[g] = Ka(Oa(a, o, g));
+  const f = (g) => Ee(u[g], 1, 1, () => {
+    u[g] = null;
+  });
+  let p = (
+    /*pending_message*/
+    a[2] && Qa(a)
+  );
+  return {
+    c() {
+      for (let g = 0; g < u.length; g += 1)
+        u[g].c();
+      r = V0(), p && p.c(), s = Sr();
+    },
+    m(g, y) {
+      for (let D = 0; D < u.length; D += 1)
+        u[D] && u[D].m(g, y);
+      ht(g, r, y), p && p.m(g, y), ht(g, s, y), i = !0;
+    },
+    p(g, y) {
+      if (y[0] & /*value, layout, avatar_images, bubble_full_width, show_copy_button, handle_like, likeable, render_markdown, rtl, selectable, handle_select, pending_message, latex_delimiters, sanitize_html, line_breaks, scroll*/
+      483295) {
+        o = fn(
+          /*value*/
+          g[0]
+        );
+        let D;
+        for (D = 0; D < o.length; D += 1) {
+          const T = Oa(g, o, D);
+          u[D] ? (u[D].p(T, y), me(u[D], 1)) : (u[D] = Ka(T), u[D].c(), me(u[D], 1), u[D].m(r.parentNode, r));
+        }
+        for (Rt(), D = o.length; D < u.length; D += 1)
+          f(D);
+        Nt();
+      }
+      /*pending_message*/
+      g[2] ? p ? (p.p(g, y), y[0] & /*pending_message*/
+      4 && me(p, 1)) : (p = Qa(g), p.c(), me(p, 1), p.m(s.parentNode, s)) : p && (Rt(), Ee(p, 1, 1, () => {
+        p = null;
+      }), Nt());
+    },
+    i(g) {
+      if (!i) {
+        for (let y = 0; y < o.length; y += 1)
+          me(u[y]);
+        me(p), i = !0;
+      }
+    },
+    o(g) {
+      u = u.filter(Boolean);
+      for (let y = 0; y < u.length; y += 1)
+        Ee(u[y]);
+      Ee(p), i = !1;
+    },
+    d(g) {
+      g && (ct(r), ct(s)), Ks(u, g), p && p.d(g);
+    }
+  };
+}
+function Ga(a) {
+  let r, s, i, o, u, f, p, g, y, D, T, P, U, K = (
+    /*avatar_images*/
+    a[8][
+      /*j*/
+      a[40]
+    ] !== null && Va(a)
+  );
+  u = new u2({
+    props: {
+      message: (
+        /*message*/
+        a[38].text
+      ),
+      latex_delimiters: (
+        /*latex_delimiters*/
+        a[1]
+      ),
+      sanitize_html: (
+        /*sanitize_html*/
+        a[9]
+      ),
+      render_markdown: (
+        /*render_markdown*/
+        a[11]
+      ),
+      line_breaks: (
+        /*line_breaks*/
+        a[12]
+      )
+    }
+  }), u.$on(
+    "load",
+    /*scroll*/
+    a[16]
+  );
+  let ee = fn(
+    /*message*/
+    a[38].files
+  ), Z = [];
+  for (let L = 0; L < ee.length; L += 1)
+    Z[L] = Wa(Pa(a, ee, L));
+  const R = (L) => Ee(Z[L], 1, 1, () => {
+    Z[L] = null;
+  });
+  function N() {
+    return (
+      /*click_handler*/
+      a[29](
+        /*i*/
+        a[37],
+        /*j*/
+        a[40],
+        /*message*/
+        a[38]
+      )
+    );
+  }
+  function S(...L) {
+    return (
+      /*keydown_handler*/
+      a[30](
+        /*i*/
+        a[37],
+        /*j*/
+        a[40],
+        /*message*/
+        a[38],
+        ...L
+      )
+    );
+  }
+  let M = (
+    /*likeable*/
+    (a[4] && /*j*/
+    a[40] !== 0 || /*show_copy_button*/
+    a[7] && /*message*/
+    a[38] && typeof /*message*/
+    a[38] == "string") && ja(a)
+  );
+  return {
+    c() {
+      var L, z, H;
+      r = xt("div"), K && K.c(), s = V0(), i = xt("div"), o = xt("button"), X0(u.$$.fragment), f = V0();
+      for (let te = 0; te < Z.length; te += 1)
+        Z[te].c();
+      y = V0(), M && M.c(), de(
+        o,
+        "data-testid",
+        /*j*/
+        a[40] == 0 ? "user" : "bot"
+      ), de(o, "dir", p = /*rtl*/
+      a[6] ? "rtl" : "ltr"), de(o, "aria-label", g = /*j*/
+      (a[40] == 0 ? "user" : "bot") + "'s message: " + (typeof /*message*/
+      a[38] == "string" ? (
+        /*message*/
+        a[38]
+      ) : `a file of type ${/*message*/
+      (L = a[38].file) == null ? void 0 : L.mime_type}, ${/*message*/
+      ((z = a[38].file) == null ? void 0 : z.alt_text) ?? /*message*/
+      ((H = a[38].file) == null ? void 0 : H.orig_name) ?? ""}`)), de(o, "class", "svelte-10ymup0"), Ke(
+        o,
+        "latest",
+        /*i*/
+        a[37] === /*value*/
+        a[0].length - 1
+      ), Ke(o, "message-markdown-disabled", !/*render_markdown*/
+      a[11]), Ke(
+        o,
+        "selectable",
+        /*selectable*/
+        a[3]
+      ), Cn(o, "user-select", "text"), Cn(
+        o,
+        "text-align",
+        /*rtl*/
+        a[6] ? "right" : "left"
+      ), de(i, "class", "message " + /*j*/
+      (a[40] == 0 ? "user" : "bot") + " svelte-10ymup0"), Ke(
+        i,
+        "message-fit",
+        /*layout*/
+        a[14] === "bubble" && !/*bubble_full_width*/
+        a[10]
+      ), Ke(
+        i,
+        "panel-full-width",
+        /*layout*/
+        a[14] === "panel"
+      ), Ke(
+        i,
+        "message-bubble-border",
+        /*layout*/
+        a[14] === "bubble"
+      ), Ke(i, "message-markdown-disabled", !/*render_markdown*/
+      a[11]), Cn(
+        i,
+        "text-align",
+        /*rtl*/
+        a[6] && /*j*/
+        a[40] == 0 ? "left" : "right"
+      ), de(r, "class", D = "message-row " + /*layout*/
+      a[14] + " " + /*j*/
+      (a[40] == 0 ? "user-row" : "bot-row") + " svelte-10ymup0");
+    },
+    m(L, z) {
+      ht(L, r, z), K && K.m(r, null), t0(r, s), t0(r, i), t0(i, o), Z0(u, o, null), t0(o, f);
+      for (let H = 0; H < Z.length; H += 1)
+        Z[H] && Z[H].m(o, null);
+      t0(r, y), M && M.m(r, null), T = !0, P || (U = [
+        N0(o, "click", N),
+        N0(o, "keydown", S)
+      ], P = !0);
+    },
+    p(L, z) {
+      var te, Q, ce;
+      a = L, /*avatar_images*/
+      a[8][
+        /*j*/
+        a[40]
+      ] !== null ? K ? (K.p(a, z), z[0] & /*avatar_images*/
+      256 && me(K, 1)) : (K = Va(a), K.c(), me(K, 1), K.m(r, s)) : K && (Rt(), Ee(K, 1, 1, () => {
+        K = null;
+      }), Nt());
+      const H = {};
+      if (z[0] & /*value*/
+      1 && (H.message = /*message*/
+      a[38].text), z[0] & /*latex_delimiters*/
+      2 && (H.latex_delimiters = /*latex_delimiters*/
+      a[1]), z[0] & /*sanitize_html*/
+      512 && (H.sanitize_html = /*sanitize_html*/
+      a[9]), z[0] & /*render_markdown*/
+      2048 && (H.render_markdown = /*render_markdown*/
+      a[11]), z[0] & /*line_breaks*/
+      4096 && (H.line_breaks = /*line_breaks*/
+      a[12]), u.$set(H), z[0] & /*value, layout, pending_message*/
+      16389) {
+        ee = fn(
+          /*message*/
+          a[38].files
+        );
+        let oe;
+        for (oe = 0; oe < ee.length; oe += 1) {
+          const Ce = Pa(a, ee, oe);
+          Z[oe] ? (Z[oe].p(Ce, z), me(Z[oe], 1)) : (Z[oe] = Wa(Ce), Z[oe].c(), me(Z[oe], 1), Z[oe].m(o, null));
+        }
+        for (Rt(), oe = ee.length; oe < Z.length; oe += 1)
+          R(oe);
+        Nt();
+      }
+      (!T || z[0] & /*rtl*/
+      64 && p !== (p = /*rtl*/
+      a[6] ? "rtl" : "ltr")) && de(o, "dir", p), (!T || z[0] & /*value*/
+      1 && g !== (g = /*j*/
+      (a[40] == 0 ? "user" : "bot") + "'s message: " + (typeof /*message*/
+      a[38] == "string" ? (
+        /*message*/
+        a[38]
+      ) : `a file of type ${/*message*/
+      (te = a[38].file) == null ? void 0 : te.mime_type}, ${/*message*/
+      ((Q = a[38].file) == null ? void 0 : Q.alt_text) ?? /*message*/
+      ((ce = a[38].file) == null ? void 0 : ce.orig_name) ?? ""}`))) && de(o, "aria-label", g), (!T || z[0] & /*value*/
+      1) && Ke(
+        o,
+        "latest",
+        /*i*/
+        a[37] === /*value*/
+        a[0].length - 1
+      ), (!T || z[0] & /*render_markdown*/
+      2048) && Ke(o, "message-markdown-disabled", !/*render_markdown*/
+      a[11]), (!T || z[0] & /*selectable*/
+      8) && Ke(
+        o,
+        "selectable",
+        /*selectable*/
+        a[3]
+      ), z[0] & /*rtl*/
+      64 && Cn(
+        o,
+        "text-align",
+        /*rtl*/
+        a[6] ? "right" : "left"
+      ), (!T || z[0] & /*layout, bubble_full_width*/
+      17408) && Ke(
+        i,
+        "message-fit",
+        /*layout*/
+        a[14] === "bubble" && !/*bubble_full_width*/
+        a[10]
+      ), (!T || z[0] & /*layout*/
+      16384) && Ke(
+        i,
+        "panel-full-width",
+        /*layout*/
+        a[14] === "panel"
+      ), (!T || z[0] & /*layout*/
+      16384) && Ke(
+        i,
+        "message-bubble-border",
+        /*layout*/
+        a[14] === "bubble"
+      ), (!T || z[0] & /*render_markdown*/
+      2048) && Ke(i, "message-markdown-disabled", !/*render_markdown*/
+      a[11]), z[0] & /*rtl*/
+      64 && Cn(
+        i,
+        "text-align",
+        /*rtl*/
+        a[6] && /*j*/
+        a[40] == 0 ? "left" : "right"
+      ), /*likeable*/
+      a[4] && /*j*/
+      a[40] !== 0 || /*show_copy_button*/
+      a[7] && /*message*/
+      a[38] && typeof /*message*/
+      a[38] == "string" ? M ? (M.p(a, z), z[0] & /*likeable, show_copy_button, value*/
+      145 && me(M, 1)) : (M = ja(a), M.c(), me(M, 1), M.m(r, null)) : M && (Rt(), Ee(M, 1, 1, () => {
+        M = null;
+      }), Nt()), (!T || z[0] & /*layout*/
+      16384 && D !== (D = "message-row " + /*layout*/
+      a[14] + " " + /*j*/
+      (a[40] == 0 ? "user-row" : "bot-row") + " svelte-10ymup0")) && de(r, "class", D);
+    },
+    i(L) {
+      if (!T) {
+        me(K), me(u.$$.fragment, L);
+        for (let z = 0; z < ee.length; z += 1)
+          me(Z[z]);
+        me(M), T = !0;
+      }
+    },
+    o(L) {
+      Ee(K), Ee(u.$$.fragment, L), Z = Z.filter(Boolean);
+      for (let z = 0; z < Z.length; z += 1)
+        Ee(Z[z]);
+      Ee(M), T = !1;
+    },
+    d(L) {
+      L && ct(r), K && K.d(), Y0(u), Ks(Z, L), M && M.d(), P = !1, Qs(U);
+    }
+  };
+}
+function Va(a) {
+  var o;
+  let r, s, i;
+  return s = new S4({
+    props: {
+      class: "avatar-image",
+      src: (
+        /*avatar_images*/
+        (o = a[8][
+          /*j*/
+          a[40]
+        ]) == null ? void 0 : o.url
+      ),
+      alt: (
+        /*j*/
+        (a[40] == 0 ? "user" : "bot") + " avatar"
+      )
+    }
+  }), {
+    c() {
+      r = xt("div"), X0(s.$$.fragment), de(r, "class", "avatar-container svelte-10ymup0");
+    },
+    m(u, f) {
+      ht(u, r, f), Z0(s, r, null), i = !0;
+    },
+    p(u, f) {
+      var g;
+      const p = {};
+      f[0] & /*avatar_images*/
+      256 && (p.src = /*avatar_images*/
+      (g = u[8][
+        /*j*/
+        u[40]
+      ]) == null ? void 0 : g.url), s.$set(p);
+    },
+    i(u) {
+      i || (me(s.$$.fragment, u), i = !0);
+    },
+    o(u) {
+      Ee(s.$$.fragment, u), i = !1;
+    },
+    d(u) {
+      u && ct(r), Y0(s);
+    }
+  };
+}
+function If(a) {
+  let r, s;
+  return r = new jo({ props: { layout: (
+    /*layout*/
+    a[14]
+  ) } }), {
+    c() {
+      X0(r.$$.fragment);
+    },
+    m(i, o) {
+      Z0(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*layout*/
+      16384 && (u.layout = /*layout*/
+      i[14]), r.$set(u);
+    },
+    i(i) {
+      s || (me(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      Ee(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Y0(r, i);
+    }
+  };
+}
+function Lf(a) {
+  var p, g;
+  let r, s = (
+    /*file*/
+    (((p = a[41].file) == null ? void 0 : p.orig_name) || /*file*/
+    ((g = a[41].file) == null ? void 0 : g.path)) + ""
+  ), i, o, u, f;
+  return {
+    c() {
+      var y, D, T;
+      r = xt("a"), i = zf(s), o = V0(), de(r, "data-testid", "chatbot-file"), de(r, "href", u = /*file*/
+      (y = a[41].file) == null ? void 0 : y.url), de(r, "target", "_blank"), de(r, "download", f = window.__is_colab__ ? null : (
+        /*file*/
+        ((D = a[41].file) == null ? void 0 : D.orig_name) || /*file*/
+        ((T = a[41].file) == null ? void 0 : T.path)
+      )), de(r, "class", "svelte-10ymup0");
+    },
+    m(y, D) {
+      ht(y, r, D), t0(r, i), t0(r, o);
+    },
+    p(y, D) {
+      var T, P, U, K, ee;
+      D[0] & /*value*/
+      1 && s !== (s = /*file*/
+      (((T = y[41].file) == null ? void 0 : T.orig_name) || /*file*/
+      ((P = y[41].file) == null ? void 0 : P.path)) + "") && Mf(i, s), D[0] & /*value*/
+      1 && u !== (u = /*file*/
+      (U = y[41].file) == null ? void 0 : U.url) && de(r, "href", u), D[0] & /*value*/
+      1 && f !== (f = window.__is_colab__ ? null : (
+        /*file*/
+        ((K = y[41].file) == null ? void 0 : K.orig_name) || /*file*/
+        ((ee = y[41].file) == null ? void 0 : ee.path)
+      )) && de(r, "download", f);
+    },
+    i: R0,
+    o: R0,
+    d(y) {
+      y && ct(r);
+    }
+  };
+}
+function Of(a) {
+  let r, s, i;
+  return {
+    c() {
+      var o;
+      r = xt("img"), de(r, "data-testid", "chatbot-image"), dn(r.src, s = /*file*/
+      (o = a[41].file) == null ? void 0 : o.url) || de(r, "src", s), de(r, "alt", i = /*file*/
+      a[41].alt_text), de(r, "class", "svelte-10ymup0");
+    },
+    m(o, u) {
+      ht(o, r, u);
+    },
+    p(o, u) {
+      var f;
+      u[0] & /*value*/
+      1 && !dn(r.src, s = /*file*/
+      (f = o[41].file) == null ? void 0 : f.url) && de(r, "src", s), u[0] & /*value*/
+      1 && i !== (i = /*file*/
+      o[41].alt_text) && de(r, "alt", i);
+    },
+    i: R0,
+    o: R0,
+    d(o) {
+      o && ct(r);
+    }
+  };
+}
+function qf(a) {
+  let r, s, i, o, u, f;
+  return {
+    c() {
+      var p;
+      r = xt("video"), s = xt("track"), de(s, "kind", "captions"), de(s, "class", "svelte-10ymup0"), de(r, "data-testid", "chatbot-video"), r.controls = !0, dn(r.src, i = /*file*/
+      (p = a[41].file) == null ? void 0 : p.url) || de(r, "src", i), de(r, "title", o = /*file*/
+      a[41].alt_text), de(r, "preload", "auto"), de(r, "class", "svelte-10ymup0");
+    },
+    m(p, g) {
+      ht(p, r, g), t0(r, s), u || (f = [
+        N0(
+          r,
+          "play",
+          /*play_handler_1*/
+          a[24]
+        ),
+        N0(
+          r,
+          "pause",
+          /*pause_handler_1*/
+          a[25]
+        ),
+        N0(
+          r,
+          "ended",
+          /*ended_handler_1*/
+          a[26]
+        )
+      ], u = !0);
+    },
+    p(p, g) {
+      var y;
+      g[0] & /*value*/
+      1 && !dn(r.src, i = /*file*/
+      (y = p[41].file) == null ? void 0 : y.url) && de(r, "src", i), g[0] & /*value*/
+      1 && o !== (o = /*file*/
+      p[41].alt_text) && de(r, "title", o);
+    },
+    i: R0,
+    o: R0,
+    d(p) {
+      p && ct(r), u = !1, Qs(f);
+    }
+  };
+}
+function Pf(a) {
+  let r, s, i, o, u;
+  return {
+    c() {
+      var f;
+      r = xt("audio"), de(r, "data-testid", "chatbot-audio"), r.controls = !0, de(r, "preload", "metadata"), dn(r.src, s = /*file*/
+      (f = a[41].file) == null ? void 0 : f.url) || de(r, "src", s), de(r, "title", i = /*file*/
+      a[41].alt_text), de(r, "class", "svelte-10ymup0");
+    },
+    m(f, p) {
+      ht(f, r, p), o || (u = [
+        N0(
+          r,
+          "play",
+          /*play_handler*/
+          a[21]
+        ),
+        N0(
+          r,
+          "pause",
+          /*pause_handler*/
+          a[22]
+        ),
+        N0(
+          r,
+          "ended",
+          /*ended_handler*/
+          a[23]
+        )
+      ], o = !0);
+    },
+    p(f, p) {
+      var g;
+      p[0] & /*value*/
+      1 && !dn(r.src, s = /*file*/
+      (g = f[41].file) == null ? void 0 : g.url) && de(r, "src", s), p[0] & /*value*/
+      1 && i !== (i = /*file*/
+      f[41].alt_text) && de(r, "title", i);
+    },
+    i: R0,
+    o: R0,
+    d(f) {
+      f && ct(r), o = !1, Qs(u);
+    }
+  };
+}
+function Wa(a) {
+  let r, s, i, o, u, f, p;
+  const g = [
+    Pf,
+    qf,
+    Of,
+    Lf,
+    If
+  ], y = [];
+  function D(T, P) {
+    var U, K, ee, Z, R, N;
+    return P[0] & /*value*/
+    1 && (r = null), P[0] & /*value*/
+    1 && (s = null), P[0] & /*value*/
+    1 && (i = null), r == null && (r = !!/*file*/
+    (T[41] !== null && /*file*/
+    ((U = T[41].file.mime_type) != null && U.includes("audio")))), r ? 0 : (s == null && (s = !!/*message*/
+    (T[38] !== null && /*file*/
+    ((ee = (K = T[41].file) == null ? void 0 : K.mime_type) != null && ee.includes("video")))), s ? 1 : (i == null && (i = !!/*message*/
+    (T[38] !== null && /*file*/
+    ((R = (Z = T[41].file) == null ? void 0 : Z.mime_type) != null && R.includes("image")))), i ? 2 : (
+      /*message*/
+      T[38] !== null && /*file*/
+      ((N = T[41].file) == null ? void 0 : N.url) !== null ? 3 : (
+        /*pending_message*/
+        T[2] && /*j*/
+        T[40] === 1 ? 4 : -1
+      )
+    )));
+  }
+  return ~(o = D(a, [-1, -1])) && (u = y[o] = g[o](a)), {
+    c() {
+      u && u.c(), f = Sr();
+    },
+    m(T, P) {
+      ~o && y[o].m(T, P), ht(T, f, P), p = !0;
+    },
+    p(T, P) {
+      let U = o;
+      o = D(T, P), o === U ? ~o && y[o].p(T, P) : (u && (Rt(), Ee(y[U], 1, 1, () => {
+        y[U] = null;
+      }), Nt()), ~o ? (u = y[o], u ? u.p(T, P) : (u = y[o] = g[o](T), u.c()), me(u, 1), u.m(f.parentNode, f)) : u = null);
+    },
+    i(T) {
+      p || (me(u), p = !0);
+    },
+    o(T) {
+      Ee(u), p = !1;
+    },
+    d(T) {
+      T && ct(f), ~o && y[o].d(T);
+    }
+  };
+}
+function ja(a) {
+  let r, s, i, o, u = (
+    /*likeable*/
+    a[4] && /*j*/
+    a[40] == 1 && Xa(a)
+  ), f = (
+    /*show_copy_button*/
+    a[7] && /*message*/
+    a[38] && typeof /*message*/
+    a[38] == "string" && Ya(a)
+  );
+  return {
+    c() {
+      r = xt("div"), u && u.c(), s = V0(), f && f.c(), de(r, "class", i = "message-buttons-" + /*j*/
+      (a[40] == 0 ? "user" : "bot") + " message-buttons-" + /*layout*/
+      a[14] + " " + /*avatar_images*/
+      (a[8][
+        /*j*/
+        a[40]
+      ] !== null && "with-avatar") + " svelte-10ymup0"), Ke(
+        r,
+        "message-buttons-fit",
+        /*layout*/
+        a[14] === "bubble" && !/*bubble_full_width*/
+        a[10]
+      ), Ke(
+        r,
+        "bubble-buttons-user",
+        /*layout*/
+        a[14] === "bubble"
+      );
+    },
+    m(p, g) {
+      ht(p, r, g), u && u.m(r, null), t0(r, s), f && f.m(r, null), o = !0;
+    },
+    p(p, g) {
+      /*likeable*/
+      p[4] && /*j*/
+      p[40] == 1 ? u ? (u.p(p, g), g[0] & /*likeable*/
+      16 && me(u, 1)) : (u = Xa(p), u.c(), me(u, 1), u.m(r, s)) : u && (Rt(), Ee(u, 1, 1, () => {
+        u = null;
+      }), Nt()), /*show_copy_button*/
+      p[7] && /*message*/
+      p[38] && typeof /*message*/
+      p[38] == "string" ? f ? (f.p(p, g), g[0] & /*show_copy_button, value*/
+      129 && me(f, 1)) : (f = Ya(p), f.c(), me(f, 1), f.m(r, null)) : f && (Rt(), Ee(f, 1, 1, () => {
+        f = null;
+      }), Nt()), (!o || g[0] & /*layout, avatar_images*/
+      16640 && i !== (i = "message-buttons-" + /*j*/
+      (p[40] == 0 ? "user" : "bot") + " message-buttons-" + /*layout*/
+      p[14] + " " + /*avatar_images*/
+      (p[8][
+        /*j*/
+        p[40]
+      ] !== null && "with-avatar") + " svelte-10ymup0")) && de(r, "class", i), (!o || g[0] & /*layout, avatar_images, layout, bubble_full_width*/
+      17664) && Ke(
+        r,
+        "message-buttons-fit",
+        /*layout*/
+        p[14] === "bubble" && !/*bubble_full_width*/
+        p[10]
+      ), (!o || g[0] & /*layout, avatar_images, layout*/
+      16640) && Ke(
+        r,
+        "bubble-buttons-user",
+        /*layout*/
+        p[14] === "bubble"
+      );
+    },
+    i(p) {
+      o || (me(u), me(f), o = !0);
+    },
+    o(p) {
+      Ee(u), Ee(f), o = !1;
+    },
+    d(p) {
+      p && ct(r), u && u.d(), f && f.d();
+    }
+  };
+}
+function Xa(a) {
+  let r, s;
+  function i(...o) {
+    return (
+      /*func*/
+      a[31](
+        /*i*/
+        a[37],
+        /*j*/
+        a[40],
+        /*message*/
+        a[38],
+        ...o
+      )
+    );
+  }
+  return r = new bf({ props: { handle_action: i } }), {
+    c() {
+      X0(r.$$.fragment);
+    },
+    m(o, u) {
+      Z0(r, o, u), s = !0;
+    },
+    p(o, u) {
+      a = o;
+      const f = {};
+      u[0] & /*value*/
+      1 && (f.handle_action = i), r.$set(f);
+    },
+    i(o) {
+      s || (me(r.$$.fragment, o), s = !0);
+    },
+    o(o) {
+      Ee(r.$$.fragment, o), s = !1;
+    },
+    d(o) {
+      Y0(r, o);
+    }
+  };
+}
+function Ya(a) {
+  let r, s;
+  return r = new uf({ props: { value: (
+    /*message*/
+    a[38]
+  ) } }), {
+    c() {
+      X0(r.$$.fragment);
+    },
+    m(i, o) {
+      Z0(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*value*/
+      1 && (u.value = /*message*/
+      i[38]), r.$set(u);
+    },
+    i(i) {
+      s || (me(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      Ee(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Y0(r, i);
+    }
+  };
+}
+function Za(a) {
+  let r, s, i = (
+    /*message*/
+    a[38] !== null && Ga(a)
+  );
+  return {
+    c() {
+      i && i.c(), r = Sr();
+    },
+    m(o, u) {
+      i && i.m(o, u), ht(o, r, u), s = !0;
+    },
+    p(o, u) {
+      /*message*/
+      o[38] !== null ? i ? (i.p(o, u), u[0] & /*value*/
+      1 && me(i, 1)) : (i = Ga(o), i.c(), me(i, 1), i.m(r.parentNode, r)) : i && (Rt(), Ee(i, 1, 1, () => {
+        i = null;
+      }), Nt());
+    },
+    i(o) {
+      s || (me(i), s = !0);
+    },
+    o(o) {
+      Ee(i), s = !1;
+    },
+    d(o) {
+      o && ct(r), i && i.d(o);
+    }
+  };
+}
+function Ka(a) {
+  let r, s, i = fn(
+    /*message_pair*/
+    a[35]
+  ), o = [];
+  for (let f = 0; f < i.length; f += 1)
+    o[f] = Za(qa(a, i, f));
+  const u = (f) => Ee(o[f], 1, 1, () => {
+    o[f] = null;
+  });
+  return {
+    c() {
+      for (let f = 0; f < o.length; f += 1)
+        o[f].c();
+      r = Sr();
+    },
+    m(f, p) {
+      for (let g = 0; g < o.length; g += 1)
+        o[g] && o[g].m(f, p);
+      ht(f, r, p), s = !0;
+    },
+    p(f, p) {
+      if (p[0] & /*layout, avatar_images, bubble_full_width, value, show_copy_button, handle_like, likeable, render_markdown, rtl, selectable, handle_select, pending_message, latex_delimiters, sanitize_html, line_breaks, scroll*/
+      483295) {
+        i = fn(
+          /*message_pair*/
+          f[35]
+        );
+        let g;
+        for (g = 0; g < i.length; g += 1) {
+          const y = qa(f, i, g);
+          o[g] ? (o[g].p(y, p), me(o[g], 1)) : (o[g] = Za(y), o[g].c(), me(o[g], 1), o[g].m(r.parentNode, r));
+        }
+        for (Rt(), g = i.length; g < o.length; g += 1)
+          u(g);
+        Nt();
+      }
+    },
+    i(f) {
+      if (!s) {
+        for (let p = 0; p < i.length; p += 1)
+          me(o[p]);
+        s = !0;
+      }
+    },
+    o(f) {
+      o = o.filter(Boolean);
+      for (let p = 0; p < o.length; p += 1)
+        Ee(o[p]);
+      s = !1;
+    },
+    d(f) {
+      f && ct(r), Ks(o, f);
+    }
+  };
+}
+function Qa(a) {
+  let r, s;
+  return r = new jo({ props: { layout: (
+    /*layout*/
+    a[14]
+  ) } }), {
+    c() {
+      X0(r.$$.fragment);
+    },
+    m(i, o) {
+      Z0(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*layout*/
+      16384 && (u.layout = /*layout*/
+      i[14]), r.$set(u);
+    },
+    i(i) {
+      s || (me(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      Ee(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Y0(r, i);
+    }
+  };
+}
+function Hf(a) {
+  let r, s, i, o, u, f, p, g = (
+    /*show_share_button*/
+    a[5] && /*value*/
+    a[0] !== null && /*value*/
+    a[0].length > 0 && Ha(a)
+  ), y = (
+    /*value*/
+    a[0] !== null && Ua(a)
+  );
+  return {
+    c() {
+      g && g.c(), r = V0(), s = xt("div"), i = xt("div"), y && y.c(), de(i, "class", "message-wrap svelte-10ymup0"), Ke(
+        i,
+        "bubble-gap",
+        /*layout*/
+        a[14] === "bubble"
+      ), de(s, "class", o = La(
+        /*layout*/
+        a[14] === "bubble" ? "bubble-wrap" : "panel-wrap"
+      ) + " svelte-10ymup0"), de(s, "role", "log"), de(s, "aria-label", "chatbot conversation"), de(s, "aria-live", "polite");
+    },
+    m(D, T) {
+      g && g.m(D, T), ht(D, r, T), ht(D, s, T), t0(s, i), y && y.m(i, null), a[32](s), u = !0, f || (p = Ff(a1.call(null, i)), f = !0);
+    },
+    p(D, T) {
+      /*show_share_button*/
+      D[5] && /*value*/
+      D[0] !== null && /*value*/
+      D[0].length > 0 ? g ? (g.p(D, T), T[0] & /*show_share_button, value*/
+      33 && me(g, 1)) : (g = Ha(D), g.c(), me(g, 1), g.m(r.parentNode, r)) : g && (Rt(), Ee(g, 1, 1, () => {
+        g = null;
+      }), Nt()), /*value*/
+      D[0] !== null ? y ? (y.p(D, T), T[0] & /*value*/
+      1 && me(y, 1)) : (y = Ua(D), y.c(), me(y, 1), y.m(i, null)) : y && (Rt(), Ee(y, 1, 1, () => {
+        y = null;
+      }), Nt()), (!u || T[0] & /*layout*/
+      16384) && Ke(
+        i,
+        "bubble-gap",
+        /*layout*/
+        D[14] === "bubble"
+      ), (!u || T[0] & /*layout*/
+      16384 && o !== (o = La(
+        /*layout*/
+        D[14] === "bubble" ? "bubble-wrap" : "panel-wrap"
+      ) + " svelte-10ymup0")) && de(s, "class", o);
+    },
+    i(D) {
+      u || (me(g), me(y), u = !0);
+    },
+    o(D) {
+      Ee(g), Ee(y), u = !1;
+    },
+    d(D) {
+      D && (ct(r), ct(s)), g && g.d(D), y && y.d(), a[32](null), f = !1, p();
+    }
+  };
+}
+function Uf(a, r, s) {
+  let i, { value: o } = r, u = null, { latex_delimiters: f } = r, { pending_message: p = !1 } = r, { selectable: g = !1 } = r, { likeable: y = !1 } = r, { show_share_button: D = !1 } = r, { rtl: T = !1 } = r, { show_copy_button: P = !1 } = r, { avatar_images: U = [null, null] } = r, { sanitize_html: K = !0 } = r, { bubble_full_width: ee = !0 } = r, { render_markdown: Z = !0 } = r, { line_breaks: R = !0 } = r, { i18n: N } = r, { layout: S = "bubble" } = r, M, L;
+  const z = Rf();
+  Bf(() => {
+    L = M && M.offsetHeight + M.scrollTop > M.scrollHeight - 100;
+  });
+  const H = () => {
+    L && M.scrollTo(0, M.scrollHeight);
+  };
+  Nf(() => {
+    L && (H(), M.querySelectorAll("img").forEach((X) => {
+      X.addEventListener("load", () => {
+        H();
+      });
+    }));
+  });
+  function te(X, ie, he) {
+    z("select", { index: [X, ie], value: he });
+  }
+  function Q(X, ie, he, tt) {
+    z("like", { index: [X, ie], value: he, liked });
+  }
+  function ce(X) {
+    T0.call(this, a, X);
+  }
+  function oe(X) {
+    T0.call(this, a, X);
+  }
+  function Ce(X) {
+    T0.call(this, a, X);
+  }
+  function ke(X) {
+    T0.call(this, a, X);
+  }
+  function Pe(X) {
+    T0.call(this, a, X);
+  }
+  function et(X) {
+    T0.call(this, a, X);
+  }
+  function vt(X) {
+    T0.call(this, a, X);
+  }
+  function mt(X) {
+    T0.call(this, a, X);
+  }
+  const Be = (X, ie, he) => te(X, ie, he), J = (X, ie, he, tt) => {
+    tt.key === "Enter" && te(X, ie, he);
+  }, _e = (X, ie, he, tt) => Q(X, ie, he);
+  function ae(X) {
+    Ef[X ? "unshift" : "push"](() => {
+      M = X, s(15, M);
+    });
+  }
+  return a.$$set = (X) => {
+    "value" in X && s(0, o = X.value), "latex_delimiters" in X && s(1, f = X.latex_delimiters), "pending_message" in X && s(2, p = X.pending_message), "selectable" in X && s(3, g = X.selectable), "likeable" in X && s(4, y = X.likeable), "show_share_button" in X && s(5, D = X.show_share_button), "rtl" in X && s(6, T = X.rtl), "show_copy_button" in X && s(7, P = X.show_copy_button), "avatar_images" in X && s(8, U = X.avatar_images), "sanitize_html" in X && s(9, K = X.sanitize_html), "bubble_full_width" in X && s(10, ee = X.bubble_full_width), "render_markdown" in X && s(11, Z = X.render_markdown), "line_breaks" in X && s(12, R = X.line_breaks), "i18n" in X && s(13, N = X.i18n), "layout" in X && s(14, S = X.layout);
+  }, a.$$.update = () => {
+    a.$$.dirty[0] & /*adjust_text_size*/
+    1048576 && i(), a.$$.dirty[0] & /*value, old_value*/
+    524289 && (Ms(o, u) || (s(19, u = o), z("change")));
+  }, s(20, i = () => {
+    let ie = getComputedStyle(document.body).getPropertyValue("--body-text-size"), he;
+    switch (ie) {
+      case "13px":
+        he = 14;
+        break;
+      case "14px":
+        he = 16;
+        break;
+      case "16px":
+        he = 20;
+        break;
+      default:
+        he = 14;
+        break;
+    }
+    document.body.style.setProperty("--chatbot-body-text-size", he + "px");
+  }), [
+    o,
+    f,
+    p,
+    g,
+    y,
+    D,
+    T,
+    P,
+    U,
+    K,
+    ee,
+    Z,
+    R,
+    N,
+    S,
+    M,
+    H,
+    te,
+    Q,
+    u,
+    i,
+    ce,
+    oe,
+    Ce,
+    ke,
+    Pe,
+    et,
+    vt,
+    mt,
+    Be,
+    J,
+    _e,
+    ae
+  ];
+}
+class Gf extends Sf {
+  constructor(r) {
+    super(), Cf(
+      this,
+      r,
+      Uf,
+      Hf,
+      Tf,
+      {
+        value: 0,
+        latex_delimiters: 1,
+        pending_message: 2,
+        selectable: 3,
+        likeable: 4,
+        show_share_button: 5,
+        rtl: 6,
+        show_copy_button: 7,
+        avatar_images: 8,
+        sanitize_html: 9,
+        bubble_full_width: 10,
+        render_markdown: 11,
+        line_breaks: 12,
+        i18n: 13,
+        layout: 14
+      },
+      null,
+      [-1, -1]
+    );
+  }
+}
+const {
+  SvelteComponent: Vf,
+  append: Wf,
+  assign: jf,
+  attr: Xf,
+  check_outros: Ja,
+  create_component: Fr,
+  destroy_component: Er,
+  detach: $a,
+  element: Yf,
+  get_spread_object: Zf,
+  get_spread_update: Kf,
+  group_outros: eo,
+  init: Qf,
+  insert: to,
+  mount_component: Cr,
+  safe_not_equal: Jf,
+  space: no,
+  transition_in: e0,
+  transition_out: z0
+} = window.__gradio__svelte__internal;
+function ro(a) {
+  let r, s;
+  const i = [
+    {
+      autoscroll: (
+        /*gradio*/
+        a[19].autoscroll
+      )
+    },
+    { i18n: (
+      /*gradio*/
+      a[19].i18n
+    ) },
+    /*loading_status*/
+    a[21],
+    {
+      show_progress: (
+        /*loading_status*/
+        a[21].show_progress === "hidden" ? "hidden" : "minimal"
+      )
+    }
+  ];
+  let o = {};
+  for (let u = 0; u < i.length; u += 1)
+    o = jf(o, i[u]);
+  return r = new Z2({ props: o }), {
+    c() {
+      Fr(r.$$.fragment);
+    },
+    m(u, f) {
+      Cr(r, u, f), s = !0;
+    },
+    p(u, f) {
+      const p = f[0] & /*gradio, loading_status*/
+      2621440 ? Kf(i, [
+        f[0] & /*gradio*/
+        524288 && {
+          autoscroll: (
+            /*gradio*/
+            u[19].autoscroll
+          )
+        },
+        f[0] & /*gradio*/
+        524288 && { i18n: (
+          /*gradio*/
+          u[19].i18n
+        ) },
+        f[0] & /*loading_status*/
+        2097152 && Zf(
+          /*loading_status*/
+          u[21]
+        ),
+        f[0] & /*loading_status*/
+        2097152 && {
+          show_progress: (
+            /*loading_status*/
+            u[21].show_progress === "hidden" ? "hidden" : "minimal"
+          )
+        }
+      ]) : {};
+      r.$set(p);
+    },
+    i(u) {
+      s || (e0(r.$$.fragment, u), s = !0);
+    },
+    o(u) {
+      z0(r.$$.fragment, u), s = !1;
+    },
+    d(u) {
+      Er(r, u);
+    }
+  };
+}
+function so(a) {
+  let r, s;
+  return r = new H1({
+    props: {
+      show_label: (
+        /*show_label*/
+        a[7]
+      ),
+      Icon: cc,
+      float: !1,
+      label: (
+        /*label*/
+        a[6] || "Chatbot"
+      )
+    }
+  }), {
+    c() {
+      Fr(r.$$.fragment);
+    },
+    m(i, o) {
+      Cr(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*show_label*/
+      128 && (u.show_label = /*show_label*/
+      i[7]), o[0] & /*label*/
+      64 && (u.label = /*label*/
+      i[6] || "Chatbot"), r.$set(u);
+    },
+    i(i) {
+      s || (e0(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      z0(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Er(r, i);
+    }
+  };
+}
+function $f(a) {
+  var g;
+  let r, s, i, o, u, f = (
+    /*loading_status*/
+    a[21] && ro(a)
+  ), p = (
+    /*show_label*/
+    a[7] && so(a)
+  );
+  return o = new Gf({
+    props: {
+      i18n: (
+        /*gradio*/
+        a[19].i18n
+      ),
+      selectable: (
+        /*_selectable*/
+        a[8]
+      ),
+      likeable: (
+        /*likeable*/
+        a[9]
+      ),
+      show_share_button: (
+        /*show_share_button*/
+        a[10]
+      ),
+      value: (
+        /*_value*/
+        a[23]
+      ),
+      latex_delimiters: (
+        /*latex_delimiters*/
+        a[18]
+      ),
+      render_markdown: (
+        /*render_markdown*/
+        a[16]
+      ),
+      pending_message: (
+        /*loading_status*/
+        ((g = a[21]) == null ? void 0 : g.status) === "pending"
+      ),
+      rtl: (
+        /*rtl*/
+        a[11]
+      ),
+      show_copy_button: (
+        /*show_copy_button*/
+        a[12]
+      ),
+      avatar_images: (
+        /*avatar_images*/
+        a[20]
+      ),
+      sanitize_html: (
+        /*sanitize_html*/
+        a[13]
+      ),
+      bubble_full_width: (
+        /*bubble_full_width*/
+        a[14]
+      ),
+      line_breaks: (
+        /*line_breaks*/
+        a[17]
+      ),
+      layout: (
+        /*layout*/
+        a[15]
+      )
+    }
+  }), o.$on(
+    "change",
+    /*change_handler*/
+    a[25]
+  ), o.$on(
+    "select",
+    /*select_handler*/
+    a[26]
+  ), o.$on(
+    "like",
+    /*like_handler*/
+    a[27]
+  ), o.$on(
+    "share",
+    /*share_handler*/
+    a[28]
+  ), o.$on(
+    "error",
+    /*error_handler*/
+    a[29]
+  ), {
+    c() {
+      f && f.c(), r = no(), s = Yf("div"), p && p.c(), i = no(), Fr(o.$$.fragment), Xf(s, "class", "wrapper svelte-r8zcdo");
+    },
+    m(y, D) {
+      f && f.m(y, D), to(y, r, D), to(y, s, D), p && p.m(s, null), Wf(s, i), Cr(o, s, null), u = !0;
+    },
+    p(y, D) {
+      var P;
+      /*loading_status*/
+      y[21] ? f ? (f.p(y, D), D[0] & /*loading_status*/
+      2097152 && e0(f, 1)) : (f = ro(y), f.c(), e0(f, 1), f.m(r.parentNode, r)) : f && (eo(), z0(f, 1, 1, () => {
+        f = null;
+      }), Ja()), /*show_label*/
+      y[7] ? p ? (p.p(y, D), D[0] & /*show_label*/
+      128 && e0(p, 1)) : (p = so(y), p.c(), e0(p, 1), p.m(s, i)) : p && (eo(), z0(p, 1, 1, () => {
+        p = null;
+      }), Ja());
+      const T = {};
+      D[0] & /*gradio*/
+      524288 && (T.i18n = /*gradio*/
+      y[19].i18n), D[0] & /*_selectable*/
+      256 && (T.selectable = /*_selectable*/
+      y[8]), D[0] & /*likeable*/
+      512 && (T.likeable = /*likeable*/
+      y[9]), D[0] & /*show_share_button*/
+      1024 && (T.show_share_button = /*show_share_button*/
+      y[10]), D[0] & /*_value*/
+      8388608 && (T.value = /*_value*/
+      y[23]), D[0] & /*latex_delimiters*/
+      262144 && (T.latex_delimiters = /*latex_delimiters*/
+      y[18]), D[0] & /*render_markdown*/
+      65536 && (T.render_markdown = /*render_markdown*/
+      y[16]), D[0] & /*loading_status*/
+      2097152 && (T.pending_message = /*loading_status*/
+      ((P = y[21]) == null ? void 0 : P.status) === "pending"), D[0] & /*rtl*/
+      2048 && (T.rtl = /*rtl*/
+      y[11]), D[0] & /*show_copy_button*/
+      4096 && (T.show_copy_button = /*show_copy_button*/
+      y[12]), D[0] & /*avatar_images*/
+      1048576 && (T.avatar_images = /*avatar_images*/
+      y[20]), D[0] & /*sanitize_html*/
+      8192 && (T.sanitize_html = /*sanitize_html*/
+      y[13]), D[0] & /*bubble_full_width*/
+      16384 && (T.bubble_full_width = /*bubble_full_width*/
+      y[14]), D[0] & /*line_breaks*/
+      131072 && (T.line_breaks = /*line_breaks*/
+      y[17]), D[0] & /*layout*/
+      32768 && (T.layout = /*layout*/
+      y[15]), o.$set(T);
+    },
+    i(y) {
+      u || (e0(f), e0(p), e0(o.$$.fragment, y), u = !0);
+    },
+    o(y) {
+      z0(f), z0(p), z0(o.$$.fragment, y), u = !1;
+    },
+    d(y) {
+      y && ($a(r), $a(s)), f && f.d(y), p && p.d(), Er(o);
+    }
+  };
+}
+function e3(a) {
+  let r, s;
+  return r = new A1({
+    props: {
+      elem_id: (
+        /*elem_id*/
+        a[0]
+      ),
+      elem_classes: (
+        /*elem_classes*/
+        a[1]
+      ),
+      visible: (
+        /*visible*/
+        a[2]
+      ),
+      padding: !1,
+      scale: (
+        /*scale*/
+        a[4]
+      ),
+      min_width: (
+        /*min_width*/
+        a[5]
+      ),
+      height: (
+        /*height*/
+        a[22]
+      ),
+      allow_overflow: !1,
+      $$slots: { default: [$f] },
+      $$scope: { ctx: a }
+    }
+  }), {
+    c() {
+      Fr(r.$$.fragment);
+    },
+    m(i, o) {
+      Cr(r, i, o), s = !0;
+    },
+    p(i, o) {
+      const u = {};
+      o[0] & /*elem_id*/
+      1 && (u.elem_id = /*elem_id*/
+      i[0]), o[0] & /*elem_classes*/
+      2 && (u.elem_classes = /*elem_classes*/
+      i[1]), o[0] & /*visible*/
+      4 && (u.visible = /*visible*/
+      i[2]), o[0] & /*scale*/
+      16 && (u.scale = /*scale*/
+      i[4]), o[0] & /*min_width*/
+      32 && (u.min_width = /*min_width*/
+      i[5]), o[0] & /*height*/
+      4194304 && (u.height = /*height*/
+      i[22]), o[0] & /*gradio, _selectable, likeable, show_share_button, _value, latex_delimiters, render_markdown, loading_status, rtl, show_copy_button, avatar_images, sanitize_html, bubble_full_width, line_breaks, layout, value, show_label, label*/
+      12582856 | o[1] & /*$$scope*/
+      2 && (u.$$scope = { dirty: o, ctx: i }), r.$set(u);
+    },
+    i(i) {
+      s || (e0(r.$$.fragment, i), s = !0);
+    },
+    o(i) {
+      z0(r.$$.fragment, i), s = !1;
+    },
+    d(i) {
+      Er(r, i);
+    }
+  };
+}
+function io(a) {
+  let r, s = a[0], i = 1;
+  for (; i < a.length; ) {
+    const o = a[i], u = a[i + 1];
+    if (i += 2, (o === "optionalAccess" || o === "optionalCall") && s == null)
+      return;
+    o === "access" || o === "optionalAccess" ? (r = s, s = u(s)) : (o === "call" || o === "optionalCall") && (s = u((...f) => s.call(r, ...f)), r = void 0);
+  }
+  return s;
+}
+function t3(a) {
+  return a === null ? a : {
+    file: io([a, "optionalAccess", (r) => r.file]),
+    alt_text: io([a, "optionalAccess", (r) => r.alt_text])
+  };
+}
+function n3(a, r, s) {
+  let { elem_id: i = "" } = r, { elem_classes: o = [] } = r, { visible: u = !0 } = r, { value: f = [] } = r, { scale: p = null } = r, { min_width: g = void 0 } = r, { label: y } = r, { show_label: D = !0 } = r, { root: T } = r, { _selectable: P = !1 } = r, { likeable: U = !1 } = r, { show_share_button: K = !1 } = r, { rtl: ee = !1 } = r, { show_copy_button: Z = !1 } = r, { sanitize_html: R = !0 } = r, { bubble_full_width: N = !0 } = r, { layout: S = "bubble" } = r, { render_markdown: M = !0 } = r, { line_breaks: L = !0 } = r, { latex_delimiters: z } = r, { gradio: H } = r, { avatar_images: te = [null, null] } = r, Q;
+  const ce = (J) => J.replace('src="/file', `src="${T}file`);
+  function oe(J) {
+    return J === null || (J.text = ce(J.text), J.files = J.files.map(t3)), J;
+  }
+  let { loading_status: Ce = void 0 } = r, { height: ke = 400 } = r;
+  const Pe = () => H.dispatch("change", f), et = (J) => H.dispatch("select", J.detail), vt = (J) => H.dispatch("like", J.detail), mt = (J) => H.dispatch("share", J.detail), Be = (J) => H.dispatch("error", J.detail);
+  return a.$$set = (J) => {
+    "elem_id" in J && s(0, i = J.elem_id), "elem_classes" in J && s(1, o = J.elem_classes), "visible" in J && s(2, u = J.visible), "value" in J && s(3, f = J.value), "scale" in J && s(4, p = J.scale), "min_width" in J && s(5, g = J.min_width), "label" in J && s(6, y = J.label), "show_label" in J && s(7, D = J.show_label), "root" in J && s(24, T = J.root), "_selectable" in J && s(8, P = J._selectable), "likeable" in J && s(9, U = J.likeable), "show_share_button" in J && s(10, K = J.show_share_button), "rtl" in J && s(11, ee = J.rtl), "show_copy_button" in J && s(12, Z = J.show_copy_button), "sanitize_html" in J && s(13, R = J.sanitize_html), "bubble_full_width" in J && s(14, N = J.bubble_full_width), "layout" in J && s(15, S = J.layout), "render_markdown" in J && s(16, M = J.render_markdown), "line_breaks" in J && s(17, L = J.line_breaks), "latex_delimiters" in J && s(18, z = J.latex_delimiters), "gradio" in J && s(19, H = J.gradio), "avatar_images" in J && s(20, te = J.avatar_images), "loading_status" in J && s(21, Ce = J.loading_status), "height" in J && s(22, ke = J.height);
+  }, a.$$.update = () => {
+    a.$$.dirty[0] & /*value*/
+    8 && s(23, Q = f ? f.map(([J, _e]) => [oe(J), oe(_e)]) : []);
+  }, [
+    i,
+    o,
+    u,
+    f,
+    p,
+    g,
+    y,
+    D,
+    P,
+    U,
+    K,
+    ee,
+    Z,
+    R,
+    N,
+    S,
+    M,
+    L,
+    z,
+    H,
+    te,
+    Ce,
+    ke,
+    Q,
+    T,
+    Pe,
+    et,
+    vt,
+    mt,
+    Be
+  ];
+}
+class w3 extends Vf {
+  constructor(r) {
+    super(), Qf(
+      this,
+      r,
+      n3,
+      e3,
+      Jf,
+      {
+        elem_id: 0,
+        elem_classes: 1,
+        visible: 2,
+        value: 3,
+        scale: 4,
+        min_width: 5,
+        label: 6,
+        show_label: 7,
+        root: 24,
+        _selectable: 8,
+        likeable: 9,
+        show_share_button: 10,
+        rtl: 11,
+        show_copy_button: 12,
+        sanitize_html: 13,
+        bubble_full_width: 14,
+        layout: 15,
+        render_markdown: 16,
+        line_breaks: 17,
+        latex_delimiters: 18,
+        gradio: 19,
+        avatar_images: 20,
+        loading_status: 21,
+        height: 22
+      },
+      null,
+      [-1, -1]
+    );
+  }
+}
+export {
+  Gf as BaseChatBot,
+  w3 as default
+};