anthodev/xeno-team-builderpublic Fork
⑂ f7c8008
Commits
⬇ Clone ▾
git clone https://git.rickub.com/anthodev/xeno-team-builder.git
git clone ssh://git@rickub.com/anthodev/xeno-team-builder.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Download ZIP

Initial commit: xeno team builder

Cedric ANTHONY committed 2026-08-04T00:24:17+02:00 Browse files
f7c8008
added .gitignore +42 -0
new file mode 100644
@@ -0,0 +1,42 @@
1+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+# dependencies
4+/node_modules
5+/.pnp
6+.pnp.*
7+.yarn/*
8+!.yarn/patches
9+!.yarn/plugins
10+!.yarn/releases
11+!.yarn/versions
12+
13+# testing
14+/coverage
15+
16+# next.js
17+/.next/
18+/out/
19+
20+# misc
21+.DS_Store
22+*.pem
23+
24+# debug
25+npm-debug.log*
26+yarn-debug.log*
27+yarn-error.log*
28+.pnpm-debug.log*
29+
30+# env files (can opt-in for committing if needed)
31+.env*
32+
33+# vercel
34+.vercel
35+
36+# typescript
37+next-env.d.ts
38+/dist/
39+/.wrangler/
40+/.sites-runtime/
41+/outputs/
42+/work/
new file mode 100644
@@ -0,0 +1,42 @@
1+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+# dependencies
4+/node_modules
5+/.pnp
6+.pnp.*
7+.yarn/*
8+!.yarn/patches
9+!.yarn/plugins
10+!.yarn/releases
11+!.yarn/versions
12+
13+# testing
14+/coverage
15+
16+# next.js
17+/.next/
18+/out/
19+
20+# misc
21+.DS_Store
22+*.pem
23+
24+# debug
25+npm-debug.log*
26+yarn-debug.log*
27+yarn-error.log*
28+.pnpm-debug.log*
29+
30+# env files (can opt-in for committing if needed)
31+.env*
32+
33+# vercel
34+.vercel
35+
36+# typescript
37+next-env.d.ts
38+/dist/
39+/.wrangler/
40+/.sites-runtime/
41+/outputs/
42+/work/
added LICENSE +21 -0
new file mode 100644
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2026 Anthodev
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
new file mode 100644
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2026 Anthodev
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
added README.md +110 -0
new file mode 100644
@@ -0,0 +1,110 @@
1+<p align="center">
2+ <img src="public/favicon.svg" width="96" height="96" alt="BLADE Team Architect logo">
3+</p>
4+
5+<h1 align="center">BLADE Team Architect</h1>
6+
7+<p align="center"><strong>Plan a progression-safe squad for Mira — from Drifter to Galactic Knight.</strong></p>
8+
9+BLADE Team Architect is a bilingual (English/French) team and build planner for
10+**Xenoblade Chronicles X: Definitive Edition**. It produces a sourced,
11+progression-safe general-purpose recommendation from the shared squad level
12+(the Avatar level), the Avatar's full class-rank map, each companion's
13+personal class rank, manual/AUTO roster choices, and Skell progression.
14+
15+The app is a fully static Next.js site: all game data and the recommendation
16+engine run client-side. There is no backend, no account, and nothing leaves
17+your browser.
18+
19+## Highlights
20+
21+- **Availability before scoring** — canonical class and companion records carry
22+ exact Art/Skill unlock ranks, weapons and Skill-slot caps. Locked abilities
23+ never enter the scorer.
24+- **Full Avatar progression** — training a child records its ancestors at rank
25+ 10. Every trained branch contributes learned cross-class Skills; mastered
26+ tier-4 classes add their weapon types and compatible regular Arts.
27+- **Companion-specific kits** — all 22 Definitive Edition companions, including
28+ Mia, use their own weapons, Arts, Skills, ranks and slot limits rather than a
29+ generic Cross-class profile.
30+- **Deterministic AUTO composition** — manual picks remain in their exact slots.
31+ AUTO slots enumerate level-eligible, non-duplicate companions and optimize
32+ tank/support/damage specialist coverage before a tie-break informed by the
33+ explicitly cited Escapist companion guide.
34+- **Shared squad level** — one level drives the Avatar and every companion:
35+ AUTO eligibility, loadouts and Skell pilot checks all use the Avatar level.
36+- **Definitive Edition progression** — levels 1–99 are supported.
37+- **Skell availability** — frame recommendations require the Skell License and
38+ the pilot's own level. Exact level-20, 30, 50 and explicitly enabled
39+ postgame level-60 frames come with attribute-matched, availability-first
40+ weapons and augments extracted from the wiki's semantic weapon database.
41+- **Source links in output** — every selected Art and Skill links to the
42+ canonical record used for its unlock check.
43+
44+## Scope
45+
46+The result is a **general-purpose heuristic**, not a universal best-in-slot
47+claim. It verifies regular Arts and Skills represented in the canonical class
48+and companion tables. Encounter resistances, gear traits, owned inventory,
49+Affinity/signature Arts, mission restrictions, BP investment and execution can
50+change the best build. Skell weapons are the highest shop models matching the
51+strategy attribute at the frame's level band — an availability baseline, not
52+a best-in-slot claim; rare drop variants, superweapons and Ares weapons are
53+out of scope.
54+
55+The tactical preference order lives in `src/data/builds.ts`. Factual unlock
56+tables live separately in `src/data/progression.ts` and
57+`src/data/companions.ts`; preference data cannot grant availability.
58+
59+## Run locally
60+
61+Requirements: Node.js 20.9 or newer.
62+
63+```bash
64+npm install
65+npm run dev
66+```
67+
68+The dev server prints its local URL (default <http://localhost:3000>).
69+
70+## Production build
71+
72+```bash
73+npm run build # emits the static site to out/
74+npx serve out # optional: preview the production output locally
75+```
76+
77+## Deploy (free tiers)
78+
79+### Vercel
80+
81+Zero configuration: import the repository on [vercel.com](https://vercel.com).
82+Vercel detects Next.js, runs `next build` and serves the static export. No
83+serverless function is invoked at runtime.
84+
85+### Render
86+
87+The repo ships a `render.yaml` blueprint: **New → Blueprint** on
88+[render.com](https://render.com), pick the repo, done (free static site, no
89+cold start). Manual equivalent: **New → Static Site** with Build Command
90+`npm ci && npm run build` and Publish Directory `out`.
91+
92+Any other static host (Netlify, Cloudflare Pages, GitHub Pages) works the same
93+way: build with `npm run build`, publish `out/`.
94+
95+## Project structure
96+
97+```
98+app/ Next.js shell (layout, metadata, page, global styles)
99+src/data/ Static game data: classes, builds, Skells, AMs, i18n copy
100+src/lib/ Types and the recommendation engine (pure functions)
101+src/components/ React components; TeamBuilder is the client boundary
102+```
103+
104+## License
105+
106+BLADE Team Architect is available under the [MIT License](LICENSE).
107+
108+Unofficial fan-made companion. Xenoblade Chronicles X and related names belong
109+to Nintendo and Monolith Soft. This project is not affiliated with, endorsed
110+by, or sponsored by them.
new file mode 100644
@@ -0,0 +1,110 @@
1+<p align="center">
2+ <img src="public/favicon.svg" width="96" height="96" alt="BLADE Team Architect logo">
3+</p>
4+
5+<h1 align="center">BLADE Team Architect</h1>
6+
7+<p align="center"><strong>Plan a progression-safe squad for Mira — from Drifter to Galactic Knight.</strong></p>
8+
9+BLADE Team Architect is a bilingual (English/French) team and build planner for
10+**Xenoblade Chronicles X: Definitive Edition**. It produces a sourced,
11+progression-safe general-purpose recommendation from the shared squad level
12+(the Avatar level), the Avatar's full class-rank map, each companion's
13+personal class rank, manual/AUTO roster choices, and Skell progression.
14+
15+The app is a fully static Next.js site: all game data and the recommendation
16+engine run client-side. There is no backend, no account, and nothing leaves
17+your browser.
18+
19+## Highlights
20+
21+- **Availability before scoring** — canonical class and companion records carry
22+ exact Art/Skill unlock ranks, weapons and Skill-slot caps. Locked abilities
23+ never enter the scorer.
24+- **Full Avatar progression** — training a child records its ancestors at rank
25+ 10. Every trained branch contributes learned cross-class Skills; mastered
26+ tier-4 classes add their weapon types and compatible regular Arts.
27+- **Companion-specific kits** — all 22 Definitive Edition companions, including
28+ Mia, use their own weapons, Arts, Skills, ranks and slot limits rather than a
29+ generic Cross-class profile.
30+- **Deterministic AUTO composition** — manual picks remain in their exact slots.
31+ AUTO slots enumerate level-eligible, non-duplicate companions and optimize
32+ tank/support/damage specialist coverage before a tie-break informed by the
33+ explicitly cited Escapist companion guide.
34+- **Shared squad level** — one level drives the Avatar and every companion:
35+ AUTO eligibility, loadouts and Skell pilot checks all use the Avatar level.
36+- **Definitive Edition progression** — levels 1–99 are supported.
37+- **Skell availability** — frame recommendations require the Skell License and
38+ the pilot's own level. Exact level-20, 30, 50 and explicitly enabled
39+ postgame level-60 frames come with attribute-matched, availability-first
40+ weapons and augments extracted from the wiki's semantic weapon database.
41+- **Source links in output** — every selected Art and Skill links to the
42+ canonical record used for its unlock check.
43+
44+## Scope
45+
46+The result is a **general-purpose heuristic**, not a universal best-in-slot
47+claim. It verifies regular Arts and Skills represented in the canonical class
48+and companion tables. Encounter resistances, gear traits, owned inventory,
49+Affinity/signature Arts, mission restrictions, BP investment and execution can
50+change the best build. Skell weapons are the highest shop models matching the
51+strategy attribute at the frame's level band — an availability baseline, not
52+a best-in-slot claim; rare drop variants, superweapons and Ares weapons are
53+out of scope.
54+
55+The tactical preference order lives in `src/data/builds.ts`. Factual unlock
56+tables live separately in `src/data/progression.ts` and
57+`src/data/companions.ts`; preference data cannot grant availability.
58+
59+## Run locally
60+
61+Requirements: Node.js 20.9 or newer.
62+
63+```bash
64+npm install
65+npm run dev
66+```
67+
68+The dev server prints its local URL (default <http://localhost:3000>).
69+
70+## Production build
71+
72+```bash
73+npm run build # emits the static site to out/
74+npx serve out # optional: preview the production output locally
75+```
76+
77+## Deploy (free tiers)
78+
79+### Vercel
80+
81+Zero configuration: import the repository on [vercel.com](https://vercel.com).
82+Vercel detects Next.js, runs `next build` and serves the static export. No
83+serverless function is invoked at runtime.
84+
85+### Render
86+
87+The repo ships a `render.yaml` blueprint: **New → Blueprint** on
88+[render.com](https://render.com), pick the repo, done (free static site, no
89+cold start). Manual equivalent: **New → Static Site** with Build Command
90+`npm ci && npm run build` and Publish Directory `out`.
91+
92+Any other static host (Netlify, Cloudflare Pages, GitHub Pages) works the same
93+way: build with `npm run build`, publish `out/`.
94+
95+## Project structure
96+
97+```
98+app/ Next.js shell (layout, metadata, page, global styles)
99+src/data/ Static game data: classes, builds, Skells, AMs, i18n copy
100+src/lib/ Types and the recommendation engine (pure functions)
101+src/components/ React components; TeamBuilder is the client boundary
102+```
103+
104+## License
105+
106+BLADE Team Architect is available under the [MIT License](LICENSE).
107+
108+Unofficial fan-made companion. Xenoblade Chronicles X and related names belong
109+to Nintendo and Monolith Soft. This project is not affiliated with, endorsed
110+by, or sponsored by them.
added app/globals.css +77 -0
new file mode 100644
@@ -0,0 +1,77 @@
1+@import "tailwindcss";
2+
3+:root { --ink:#07171c; --deep:#061015; --panel:#0a1e24; --line:rgba(151,231,232,.18); --cyan:#96eff0; --mint:#6ef3c5; --orange:#ff714f; --paper:#edf6f2; }
4+* { box-sizing:border-box; }
5+html { scroll-behavior:smooth; }
6+body { margin:0; background:var(--deep); color:var(--paper); font-family:Arial, Helvetica, sans-serif; }
7+button, select, input { font:inherit; }
8+main { min-height:100vh; overflow:hidden; background:radial-gradient(circle at 84% 18%, rgba(69,207,195,.14), transparent 28%), linear-gradient(135deg,#07181e 0%,#061116 55%,#0b2025 100%); position:relative; }
9+main::before { content:""; position:absolute; inset:0; background-image:linear-gradient(rgba(151,239,240,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(151,239,240,.025) 1px,transparent 1px); background-size:48px 48px; pointer-events:none; }
10+.scanlines { position:fixed; inset:0; pointer-events:none; z-index:20; opacity:.18; background:repeating-linear-gradient(0deg,transparent 0 3px,rgba(0,0,0,.18) 4px); }
11+.topbar { height:76px; max-width:1760px; margin:auto; padding:0 5vw; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; position:relative; z-index:2; }
12+.brand { display:flex; align-items:center; gap:12px; color:white; text-decoration:none; }
13+.brand-mark { width:38px; height:38px; display:grid; place-items:center; border:1px solid var(--cyan); color:var(--cyan); font-size:26px; font-weight:900; transform:skew(-8deg); box-shadow:inset 0 0 18px rgba(150,239,240,.12); }
14+.brand b,.brand small { display:block; letter-spacing:.18em; } .brand b{font-size:19px}.brand small{font-size:13px;color:#7da0a4;margin-top:2px}
15+.top-status { margin-left:auto; margin-right:32px; color:#85a8aa; letter-spacing:.18em; font-size:14px; }
16+.pulse { width:7px; height:7px; display:inline-block; border-radius:50%; background:var(--mint); box-shadow:0 0 12px var(--mint); margin-right:8px; }
17+.language-switch { display:flex; border:1px solid var(--line); padding:3px; }
18+.language-switch button { border:0; background:none; color:#719094; font-size:15px; font-weight:bold; padding:7px 10px; cursor:pointer; }
19+.language-switch button.active { background:var(--cyan); color:var(--deep); }
20+.builder-shell { max-width:1760px; margin:0 auto; padding:48px 5vw 72px; position:relative; z-index:2; }
21+.section-heading { display:flex; align-items:center; border-top:1px solid var(--line); padding:22px 0; gap:18px; }
22+.section-heading .step { color:var(--deep); background:var(--mint); padding:8px 9px; font-weight:900; font-size:16px; clip-path:polygon(0 0,100% 0,82% 100%,0 100%); }
23+.section-heading p { color:#6f9699;letter-spacing:.23em;font-size:13px;margin:0 0 4px}.section-heading h2{font-size:22px;margin:0;font-weight:500}.section-code{margin-left:auto;color:#55787c;font-size:13px;letter-spacing:.2em}
24+.builder-grid { display:grid; grid-template-columns:1.15fr .85fr; gap:12px; }
25+.panel { background:linear-gradient(145deg,rgba(13,39,46,.9),rgba(7,24,29,.92)); border:1px solid var(--line); padding:28px; box-shadow:0 20px 70px rgba(0,0,0,.17); position:relative; }
26+.panel::before { content:"";position:absolute;left:-1px;top:18px;width:2px;height:42px;background:var(--cyan);box-shadow:0 0 12px var(--cyan); }
27+.field-label { display:flex; justify-content:space-between; color:#b7cdcc; font-size:16px; letter-spacing:.08em; }
28+.field-label output { color:var(--cyan);font-size:32px;font-weight:300;line-height:1; }
29+.level-slider { width:100%; margin:22px 0 7px; accent-color:var(--cyan); cursor:pointer; }
30+.level-row { display:grid; grid-template-columns:1fr auto; gap:12px; align-items:center; }
31+.level-input { width:76px; background:#07171c; border:1px solid rgba(150,239,240,.2); color:var(--cyan); padding:13px 8px; font-size:16px; text-align:center; outline:none; }
32+.level-input:focus { border-color:var(--cyan); box-shadow:0 0 0 2px rgba(150,239,240,.08); }
33+.scale { display:flex;justify-content:space-between;color:#4c7476;font-size:13px; }
34+.field-row { display:grid;grid-template-columns:1.45fr .55fr;gap:12px;margin-top:30px; }
35+.field-row label>span { display:block;font-size:14px;color:#6f9193;letter-spacing:.14em;margin-bottom:8px;text-transform:uppercase; }
36+select { width:100%;appearance:none;color:#dce9e6;background:#07171c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2396eff0'/%3E%3C/svg%3E") no-repeat right 13px center;border:1px solid rgba(150,239,240,.2);padding:13px 34px 13px 13px;font-size:16px;outline:none; }
37+select:focus { border-color:var(--cyan);box-shadow:0 0 0 2px rgba(150,239,240,.08); }
38+.class-readout { display:grid;grid-template-columns:1fr 1fr;gap:22px;border-top:1px solid var(--line);margin-top:22px;padding-top:18px; }
39+.class-readout small { display:block;color:#527579;font-size:13px;letter-spacing:.16em;text-transform:uppercase;margin-bottom:7px}.class-readout p{margin:0;font-size:15px;color:#a6bfbe;line-height:1.55}.class-readout span{color:var(--orange)}
40+.panel-title { display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:18px}.panel-title h3{font-size:19px;margin:0 0 6px}.panel-title p{margin:0;color:#618589;font-size:14px}.panel-title>span{font-size:29px;color:var(--cyan);font-weight:300}
41+.operator-list { display:grid;gap:8px; }.operator { display:grid;grid-template-columns:34px minmax(150px,1fr) auto auto;align-items:center;background:rgba(4,15,18,.52);border:1px solid rgba(150,239,240,.09); }
42+.operator-index { text-align:center;color:#557d80;font-size:14px}.operator>select{border:0;border-left:1px solid rgba(150,239,240,.09);background-color:transparent;padding-top:14px;padding-bottom:14px}.operator-state{font-size:11px;letter-spacing:.12em;color:#658085;padding:0 9px}.operator-state.online{color:var(--mint)}.operator-metrics{display:flex;align-items:stretch;border-left:1px solid rgba(150,239,240,.09)}.operator-metrics label{display:grid;grid-template-columns:auto 52px;align-items:center;gap:5px;padding:0 7px;color:#638689;font-size:11px;letter-spacing:.08em}.operator-metrics label+label{border-left:1px solid rgba(150,239,240,.09)}.operator-metrics input{width:52px;background:#07171c;border:1px solid rgba(150,239,240,.18);color:var(--cyan);padding:7px 3px;text-align:center;outline:none}.operator-metrics input:focus{border-color:var(--cyan);box-shadow:0 0 0 2px rgba(150,239,240,.08)}.progression-controls{display:grid;grid-template-columns:1fr 1fr;gap:9px 14px;margin:18px 0 0;padding:13px 14px;border:1px solid var(--line)}.progression-controls legend{padding:0 6px;color:#6f9193;font-size:12px;letter-spacing:.14em;text-transform:uppercase}.progression-controls label{display:flex;align-items:center;gap:8px;color:#9bb2b1;font-size:13px}.progression-controls label.disabled{opacity:.45}.progression-controls input{accent-color:var(--cyan)}
43+.generate-button { width:100%;margin-top:19px;border:0;background:var(--cyan);color:#061318;display:flex;align-items:center;justify-content:space-between;padding:17px 18px;text-transform:uppercase;font-size:15px;letter-spacing:.13em;font-weight:900;cursor:pointer;clip-path:polygon(0 0,96% 0,100% 28%,100% 100%,0 100%);transition:.2s ease; }
44+.generate-button:hover { background:white;transform:translateY(-2px);box-shadow:0 12px 30px rgba(150,239,240,.18)}.generate-button b{font-size:24px}
45+.ranks-toggle { width:100%;display:flex;align-items:center;justify-content:space-between;margin-top:18px;padding:12px 0;border:0;border-top:1px solid var(--line);background:none;color:#6e9698;text-transform:uppercase;letter-spacing:.13em;font-size:13px;cursor:pointer}.ranks-toggle b{font-size:23px;color:var(--cyan)}
46+.rank-hint { margin:10px 0 6px; font-size:13px; color:#6f9193; letter-spacing:.1em; line-height:1.5; }
47+.rank-tree { border-top:1px solid var(--line); margin-top:12px; padding-top:6px; max-height:340px; overflow:auto; }
48+.rank-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:7px 0; border-bottom:1px solid rgba(150,239,240,.08); }
49+.rank-row.active { background:rgba(150,239,240,.06); box-shadow:inset 2px 0 var(--cyan); }
50+.rank-twig { width:16px; flex:none; color:#4f7376; font-size:13px; }
51+.rank-name { display:flex; align-items:center; gap:8px; flex:1; min-width:0; font-size:14px; color:#99b2b2; }
52+.rank-tier-tag { font-size:12px; color:#4f7376; letter-spacing:.08em; }
53+.rank-stepper { display:flex; align-items:center; gap:6px; }
54+.rank-stepper button { width:26px; height:26px; padding:0; display:grid; place-items:center; background:#07171c; border:1px solid var(--line); color:var(--cyan); font-size:15px; line-height:1; cursor:pointer; transition:.18s ease; }
55+.rank-stepper button:hover { border-color:var(--cyan); box-shadow:0 0 10px rgba(150,239,240,.15); }
56+.rank-stepper .rank-value { width:42px; height:26px; padding:0 2px; background:#07171c; border:1px solid var(--line); color:var(--cyan); font-size:15px; text-align:center; outline:none; appearance:textfield; -moz-appearance:textfield; }
57+.rank-stepper .rank-value::-webkit-outer-spin-button,.rank-stepper .rank-value::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }
58+.rank-stepper .rank-value:focus { border-color:var(--cyan); box-shadow:0 0 0 2px rgba(150,239,240,.08); }
59+.results { max-width:1760px;margin:0 auto;padding:16px 5vw 100px;position:relative;z-index:2;border-top:1px solid var(--line)}
60+.results-heading { padding-top:28px }.result-meta{margin-left:auto;text-align:right}.result-meta b,.result-meta span{display:block}.result-meta b{font-size:24px;color:var(--cyan);font-weight:300}.result-meta span{font-size:12px;color:#64878a;letter-spacing:.18em;margin-top:4px}
61+.squad-summary { display:grid;grid-template-columns:1.2fr 1.2fr 1fr;border:1px solid var(--line);background:rgba(8,29,34,.72);margin-bottom:12px}.squad-summary>div{padding:18px 20px;border-right:1px solid var(--line)}.squad-summary>div:last-child{border:0}.squad-summary small,.squad-summary strong,.squad-summary span{display:block}.squad-summary small{font-size:12px;color:#5d8487;letter-spacing:.18em;margin-bottom:7px}.squad-summary strong{font-size:16px;color:#dbeae7;font-weight:500;line-height:1.45}.squad-summary span{font-size:13px;color:#708f91;margin-top:6px;line-height:1.45}.coverage-summary strong{color:var(--mint)}
62+.build-list { display:grid;gap:12px}.build-tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;margin-bottom:12px}.build-tabs button{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;text-align:left;border:1px solid var(--line);background:rgba(8,29,34,.6);padding:10px 14px;cursor:pointer;color:#dbeae7}.build-tabs button>span{grid-row:1/3;font-size:12px;color:#567c7f}.build-tabs button>small{grid-column:2;font-size:11px;color:#5d8487;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.build-tabs button:hover{border-color:rgba(150,239,240,.4)}.build-tabs button.active{border-color:var(--cyan);background:rgba(150,239,240,.07);box-shadow:0 0 24px rgba(150,239,240,.08)}.build-tabs button.active>span,.build-tabs button.active>small{color:var(--cyan)}.build-card{border:1px solid var(--line);background:linear-gradient(145deg,rgba(10,31,37,.96),rgba(6,21,26,.97));box-shadow:0 20px 55px rgba(0,0,0,.15)}
63+.build-card-head{min-height:72px;display:grid;grid-template-columns:54px 1fr auto;align-items:center;border-bottom:1px solid var(--line)}.member-number{height:100%;display:grid;place-items:center;border-right:1px solid var(--line);font-size:16px;color:#567c7f}.build-card-head>div:nth-child(2){padding:12px 0 12px 16px}.build-card-head h3{font-size:25px;margin:0 0 3px}.build-card-head p{font-size:14px;color:#709194;margin:0}.role-tag{text-align:right;padding:12px 20px}.role-tag small,.role-tag b{display:block}.role-tag small{font-size:12px;color:var(--orange);letter-spacing:.15em;margin-bottom:5px}.role-tag b{font-size:15px;color:#a9c1c0;font-weight:500}
64+.build-columns { display:grid;grid-template-columns:1.15fr .95fr .9fr}.loadout-block{padding:20px;border-right:1px solid var(--line);min-width:0}.loadout-block:last-child{border:0}.loadout-block h4{font-size:15px;letter-spacing:.11em;text-transform:uppercase;margin:0 0 14px;display:flex;align-items:center;gap:8px}.loadout-block h4>span{width:22px;height:22px;display:grid;place-items:center;border:1px solid var(--cyan);color:var(--cyan);font-size:13px;flex:none}.loadout-block h5{font-size:12px;letter-spacing:.16em;color:#618587;margin:20px 0 9px}.weapon-lock{font-size:13px;color:#66888a;line-height:1.45;min-height:24px;margin:0 0 12px}.arts-block ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:5px}.arts-block li{display:grid;grid-template-columns:18px 1fr auto;align-items:start;padding:7px 6px;border:1px solid rgba(150,239,240,.08);background:rgba(2,14,17,.35);min-width:0}.arts-block li>span{font-size:12px;color:#4e7477;grid-row:1/3}.arts-block li b{font-size:13px;color:#bfd0ce;line-height:1.3;min-width:0}.arts-block li small{display:block;font-size:11px;color:#527477;line-height:1.3;margin-top:2px}.arts-block li .lvl-badge{grid-row:1/3;grid-column:3;margin:1px 0 0 6px;max-width:108px;text-align:center}
65+.chip-list{display:grid;gap:6px}.chip-list>span{display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid rgba(110,243,197,.2);background:rgba(110,243,197,.05);color:#9ec3b8;padding:7px 9px;font-size:12px;line-height:1.35}.chip-list b{font-weight:500}.chip-list .lvl-badge{margin-left:auto;flex-shrink:0}.stat-priority-list,.plan-reasons{margin:0;padding-left:20px;color:#789698;font-size:12px;line-height:1.55}.am-note{margin:0;display:grid;gap:2px}.am-note b{font-size:13px;color:#dbeae7;font-weight:500}.am-note span{font-size:12px;color:#789698;line-height:1.45}.stat-priority-list{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.plan-reasons{display:grid;gap:5px}.empty-loadout{border-left:1px solid var(--orange);padding-left:9px;color:#708f91;font-size:12px;line-height:1.5}
66+.skell-frame{border:1px solid rgba(255,113,79,.2);padding:11px;background:rgba(255,113,79,.04)}.skell-frame small,.skell-frame strong,.skell-frame span{display:block}.skell-frame small{font-size:11px;letter-spacing:.18em;color:#8f6c65}.skell-frame strong{font-size:28px;color:#ff9479;font-weight:300;margin:3px 0}.skell-frame span{font-size:12px;color:#896f6a}.skell-facts{display:grid;gap:0;margin:12px 0 0}.skell-facts>div{border-top:1px solid rgba(150,239,240,.09);padding:9px 0}.skell-facts dt{font-size:11px;letter-spacing:.12em;color:#5f8183;text-transform:uppercase}.skell-facts dd{margin:4px 0 0;color:#9eb5b4;font-size:12px;line-height:1.45}.skell-unavailable{border:1px solid rgba(255,113,79,.2);padding:14px;background:rgba(255,113,79,.04)}.skell-unavailable strong{color:#ff9479;font-size:13px;letter-spacing:.12em}.skell-unavailable p{margin:7px 0 0;color:#896f6a;font-size:13px;line-height:1.5}
67+.skell-alts{margin:12px 0;opacity:.62}.skell-alts>small{display:block;font-size:10px;letter-spacing:.18em;color:#5d8487;text-transform:uppercase;margin-bottom:5px}.skell-alts p{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0;padding:4px 0;border-top:1px solid rgba(150,239,240,.07)}.skell-alts b{font-size:13px;color:#9eb5b4;font-weight:400}.skell-alts span{font-size:11px;color:#537477}
68+.skell-gear-list{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:6px}.skell-gear-list li{display:grid;gap:2px;border-left:2px solid rgba(150,239,240,.18);padding:4px 0 4px 10px}.skell-gear-list b{font-size:13px;color:#dbeae7;font-weight:500}.skell-gear-list small{font-size:11px;color:#5d8487;letter-spacing:.08em;text-transform:uppercase}
69+.lvl-badge { display:inline-block;border:1px solid rgba(150,239,240,.35);color:var(--cyan);font-size:10px;font-style:normal;letter-spacing:.05em;padding:2px 5px;text-decoration:none;line-height:1.35 }
70+.lvl-badge:hover,.lvl-badge:focus-visible{border-color:var(--cyan);background:rgba(150,239,240,.08)}
71+.method-note{display:grid;grid-template-columns:40px 1fr;gap:15px;margin-top:18px;border:1px solid var(--line);padding:20px;background:rgba(7,26,31,.7)}.method-note>span{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--orange);color:var(--orange)}.method-note h3{font-size:16px;margin:2px 0 7px}.method-note p{font-size:14px;line-height:1.65;color:#789698;margin:0;max-width:1200px}
72+footer{max-width:1760px;margin:0 auto;padding:28px 5vw 40px;border-top:1px solid var(--line);position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between}footer b,footer span{display:block}footer b{font-size:14px;letter-spacing:.18em;color:#91adaa}footer span{font-size:12px;color:#537477;margin-top:5px}footer nav{display:flex;gap:17px}footer a{font-size:13px;color:#6b9596;text-decoration:none;border-bottom:1px solid transparent;padding-bottom:3px}footer a:hover{color:var(--cyan);border-color:var(--cyan)}
73+@media(max-width:1300px){.build-columns{grid-template-columns:1fr 1fr}.loadout-block:nth-child(2){border-right:0}.build-columns .skell-block{grid-column:1/-1;border-top:1px solid var(--line);border-right:0}}
74+@media(max-width:1100px){.operator{grid-template-columns:34px minmax(0,1fr) auto}.operator-metrics{grid-column:2/4;border-top:1px solid rgba(150,239,240,.09)}.operator-metrics label{flex:1}}
75+@media(max-width:850px){.builder-grid{grid-template-columns:1fr}.top-status{display:none}.section-code{display:none}.squad-summary{grid-template-columns:1fr}.squad-summary>div{border-right:0;border-bottom:1px solid var(--line)}footer{align-items:flex-start;gap:20px}footer nav{flex-wrap:wrap;justify-content:flex-end}}
76+@media(max-width:560px){.topbar{padding:0 20px}.builder-shell,.results{padding-left:20px;padding-right:20px}.brand small{display:none}.panel{padding:20px}.field-row,.class-readout{grid-template-columns:1fr}.operator{grid-template-columns:28px minmax(0,1fr);padding:7px 0}.operator>select{border-bottom:1px solid rgba(150,239,240,.09)}.operator-state{display:none}.operator-metrics{grid-column:2;display:grid;grid-template-columns:1fr 1fr;border-left:1px solid rgba(150,239,240,.09)}.operator-metrics label{grid-template-columns:1fr 52px;padding:7px}.progression-controls{grid-template-columns:1fr}.build-columns{grid-template-columns:1fr}.skell-block{grid-column:auto}.loadout-block{border-right:0;border-bottom:1px solid var(--line)!important}.build-card-head{grid-template-columns:40px 1fr}.role-tag{display:none}.arts-block ol{grid-template-columns:1fr}.result-meta{display:none}.stat-priority-list{grid-template-columns:1fr}footer{flex-direction:column}footer nav{justify-content:flex-start}}
77+@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
new file mode 100644
@@ -0,0 +1,77 @@
1+@import "tailwindcss";
2+
3+:root { --ink:#07171c; --deep:#061015; --panel:#0a1e24; --line:rgba(151,231,232,.18); --cyan:#96eff0; --mint:#6ef3c5; --orange:#ff714f; --paper:#edf6f2; }
4+* { box-sizing:border-box; }
5+html { scroll-behavior:smooth; }
6+body { margin:0; background:var(--deep); color:var(--paper); font-family:Arial, Helvetica, sans-serif; }
7+button, select, input { font:inherit; }
8+main { min-height:100vh; overflow:hidden; background:radial-gradient(circle at 84% 18%, rgba(69,207,195,.14), transparent 28%), linear-gradient(135deg,#07181e 0%,#061116 55%,#0b2025 100%); position:relative; }
9+main::before { content:""; position:absolute; inset:0; background-image:linear-gradient(rgba(151,239,240,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(151,239,240,.025) 1px,transparent 1px); background-size:48px 48px; pointer-events:none; }
10+.scanlines { position:fixed; inset:0; pointer-events:none; z-index:20; opacity:.18; background:repeating-linear-gradient(0deg,transparent 0 3px,rgba(0,0,0,.18) 4px); }
11+.topbar { height:76px; max-width:1760px; margin:auto; padding:0 5vw; border-bottom:1px solid var(--line); display:flex; align-items:center; justify-content:space-between; position:relative; z-index:2; }
12+.brand { display:flex; align-items:center; gap:12px; color:white; text-decoration:none; }
13+.brand-mark { width:38px; height:38px; display:grid; place-items:center; border:1px solid var(--cyan); color:var(--cyan); font-size:26px; font-weight:900; transform:skew(-8deg); box-shadow:inset 0 0 18px rgba(150,239,240,.12); }
14+.brand b,.brand small { display:block; letter-spacing:.18em; } .brand b{font-size:19px}.brand small{font-size:13px;color:#7da0a4;margin-top:2px}
15+.top-status { margin-left:auto; margin-right:32px; color:#85a8aa; letter-spacing:.18em; font-size:14px; }
16+.pulse { width:7px; height:7px; display:inline-block; border-radius:50%; background:var(--mint); box-shadow:0 0 12px var(--mint); margin-right:8px; }
17+.language-switch { display:flex; border:1px solid var(--line); padding:3px; }
18+.language-switch button { border:0; background:none; color:#719094; font-size:15px; font-weight:bold; padding:7px 10px; cursor:pointer; }
19+.language-switch button.active { background:var(--cyan); color:var(--deep); }
20+.builder-shell { max-width:1760px; margin:0 auto; padding:48px 5vw 72px; position:relative; z-index:2; }
21+.section-heading { display:flex; align-items:center; border-top:1px solid var(--line); padding:22px 0; gap:18px; }
22+.section-heading .step { color:var(--deep); background:var(--mint); padding:8px 9px; font-weight:900; font-size:16px; clip-path:polygon(0 0,100% 0,82% 100%,0 100%); }
23+.section-heading p { color:#6f9699;letter-spacing:.23em;font-size:13px;margin:0 0 4px}.section-heading h2{font-size:22px;margin:0;font-weight:500}.section-code{margin-left:auto;color:#55787c;font-size:13px;letter-spacing:.2em}
24+.builder-grid { display:grid; grid-template-columns:1.15fr .85fr; gap:12px; }
25+.panel { background:linear-gradient(145deg,rgba(13,39,46,.9),rgba(7,24,29,.92)); border:1px solid var(--line); padding:28px; box-shadow:0 20px 70px rgba(0,0,0,.17); position:relative; }
26+.panel::before { content:"";position:absolute;left:-1px;top:18px;width:2px;height:42px;background:var(--cyan);box-shadow:0 0 12px var(--cyan); }
27+.field-label { display:flex; justify-content:space-between; color:#b7cdcc; font-size:16px; letter-spacing:.08em; }
28+.field-label output { color:var(--cyan);font-size:32px;font-weight:300;line-height:1; }
29+.level-slider { width:100%; margin:22px 0 7px; accent-color:var(--cyan); cursor:pointer; }
30+.level-row { display:grid; grid-template-columns:1fr auto; gap:12px; align-items:center; }
31+.level-input { width:76px; background:#07171c; border:1px solid rgba(150,239,240,.2); color:var(--cyan); padding:13px 8px; font-size:16px; text-align:center; outline:none; }
32+.level-input:focus { border-color:var(--cyan); box-shadow:0 0 0 2px rgba(150,239,240,.08); }
33+.scale { display:flex;justify-content:space-between;color:#4c7476;font-size:13px; }
34+.field-row { display:grid;grid-template-columns:1.45fr .55fr;gap:12px;margin-top:30px; }
35+.field-row label>span { display:block;font-size:14px;color:#6f9193;letter-spacing:.14em;margin-bottom:8px;text-transform:uppercase; }
36+select { width:100%;appearance:none;color:#dce9e6;background:#07171c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%2396eff0'/%3E%3C/svg%3E") no-repeat right 13px center;border:1px solid rgba(150,239,240,.2);padding:13px 34px 13px 13px;font-size:16px;outline:none; }
37+select:focus { border-color:var(--cyan);box-shadow:0 0 0 2px rgba(150,239,240,.08); }
38+.class-readout { display:grid;grid-template-columns:1fr 1fr;gap:22px;border-top:1px solid var(--line);margin-top:22px;padding-top:18px; }
39+.class-readout small { display:block;color:#527579;font-size:13px;letter-spacing:.16em;text-transform:uppercase;margin-bottom:7px}.class-readout p{margin:0;font-size:15px;color:#a6bfbe;line-height:1.55}.class-readout span{color:var(--orange)}
40+.panel-title { display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:18px}.panel-title h3{font-size:19px;margin:0 0 6px}.panel-title p{margin:0;color:#618589;font-size:14px}.panel-title>span{font-size:29px;color:var(--cyan);font-weight:300}
41+.operator-list { display:grid;gap:8px; }.operator { display:grid;grid-template-columns:34px minmax(150px,1fr) auto auto;align-items:center;background:rgba(4,15,18,.52);border:1px solid rgba(150,239,240,.09); }
42+.operator-index { text-align:center;color:#557d80;font-size:14px}.operator>select{border:0;border-left:1px solid rgba(150,239,240,.09);background-color:transparent;padding-top:14px;padding-bottom:14px}.operator-state{font-size:11px;letter-spacing:.12em;color:#658085;padding:0 9px}.operator-state.online{color:var(--mint)}.operator-metrics{display:flex;align-items:stretch;border-left:1px solid rgba(150,239,240,.09)}.operator-metrics label{display:grid;grid-template-columns:auto 52px;align-items:center;gap:5px;padding:0 7px;color:#638689;font-size:11px;letter-spacing:.08em}.operator-metrics label+label{border-left:1px solid rgba(150,239,240,.09)}.operator-metrics input{width:52px;background:#07171c;border:1px solid rgba(150,239,240,.18);color:var(--cyan);padding:7px 3px;text-align:center;outline:none}.operator-metrics input:focus{border-color:var(--cyan);box-shadow:0 0 0 2px rgba(150,239,240,.08)}.progression-controls{display:grid;grid-template-columns:1fr 1fr;gap:9px 14px;margin:18px 0 0;padding:13px 14px;border:1px solid var(--line)}.progression-controls legend{padding:0 6px;color:#6f9193;font-size:12px;letter-spacing:.14em;text-transform:uppercase}.progression-controls label{display:flex;align-items:center;gap:8px;color:#9bb2b1;font-size:13px}.progression-controls label.disabled{opacity:.45}.progression-controls input{accent-color:var(--cyan)}
43+.generate-button { width:100%;margin-top:19px;border:0;background:var(--cyan);color:#061318;display:flex;align-items:center;justify-content:space-between;padding:17px 18px;text-transform:uppercase;font-size:15px;letter-spacing:.13em;font-weight:900;cursor:pointer;clip-path:polygon(0 0,96% 0,100% 28%,100% 100%,0 100%);transition:.2s ease; }
44+.generate-button:hover { background:white;transform:translateY(-2px);box-shadow:0 12px 30px rgba(150,239,240,.18)}.generate-button b{font-size:24px}
45+.ranks-toggle { width:100%;display:flex;align-items:center;justify-content:space-between;margin-top:18px;padding:12px 0;border:0;border-top:1px solid var(--line);background:none;color:#6e9698;text-transform:uppercase;letter-spacing:.13em;font-size:13px;cursor:pointer}.ranks-toggle b{font-size:23px;color:var(--cyan)}
46+.rank-hint { margin:10px 0 6px; font-size:13px; color:#6f9193; letter-spacing:.1em; line-height:1.5; }
47+.rank-tree { border-top:1px solid var(--line); margin-top:12px; padding-top:6px; max-height:340px; overflow:auto; }
48+.rank-row { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:7px 0; border-bottom:1px solid rgba(150,239,240,.08); }
49+.rank-row.active { background:rgba(150,239,240,.06); box-shadow:inset 2px 0 var(--cyan); }
50+.rank-twig { width:16px; flex:none; color:#4f7376; font-size:13px; }
51+.rank-name { display:flex; align-items:center; gap:8px; flex:1; min-width:0; font-size:14px; color:#99b2b2; }
52+.rank-tier-tag { font-size:12px; color:#4f7376; letter-spacing:.08em; }
53+.rank-stepper { display:flex; align-items:center; gap:6px; }
54+.rank-stepper button { width:26px; height:26px; padding:0; display:grid; place-items:center; background:#07171c; border:1px solid var(--line); color:var(--cyan); font-size:15px; line-height:1; cursor:pointer; transition:.18s ease; }
55+.rank-stepper button:hover { border-color:var(--cyan); box-shadow:0 0 10px rgba(150,239,240,.15); }
56+.rank-stepper .rank-value { width:42px; height:26px; padding:0 2px; background:#07171c; border:1px solid var(--line); color:var(--cyan); font-size:15px; text-align:center; outline:none; appearance:textfield; -moz-appearance:textfield; }
57+.rank-stepper .rank-value::-webkit-outer-spin-button,.rank-stepper .rank-value::-webkit-inner-spin-button { -webkit-appearance:none; margin:0; }
58+.rank-stepper .rank-value:focus { border-color:var(--cyan); box-shadow:0 0 0 2px rgba(150,239,240,.08); }
59+.results { max-width:1760px;margin:0 auto;padding:16px 5vw 100px;position:relative;z-index:2;border-top:1px solid var(--line)}
60+.results-heading { padding-top:28px }.result-meta{margin-left:auto;text-align:right}.result-meta b,.result-meta span{display:block}.result-meta b{font-size:24px;color:var(--cyan);font-weight:300}.result-meta span{font-size:12px;color:#64878a;letter-spacing:.18em;margin-top:4px}
61+.squad-summary { display:grid;grid-template-columns:1.2fr 1.2fr 1fr;border:1px solid var(--line);background:rgba(8,29,34,.72);margin-bottom:12px}.squad-summary>div{padding:18px 20px;border-right:1px solid var(--line)}.squad-summary>div:last-child{border:0}.squad-summary small,.squad-summary strong,.squad-summary span{display:block}.squad-summary small{font-size:12px;color:#5d8487;letter-spacing:.18em;margin-bottom:7px}.squad-summary strong{font-size:16px;color:#dbeae7;font-weight:500;line-height:1.45}.squad-summary span{font-size:13px;color:#708f91;margin-top:6px;line-height:1.45}.coverage-summary strong{color:var(--mint)}
62+.build-list { display:grid;gap:12px}.build-tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px;margin-bottom:12px}.build-tabs button{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;text-align:left;border:1px solid var(--line);background:rgba(8,29,34,.6);padding:10px 14px;cursor:pointer;color:#dbeae7}.build-tabs button>span{grid-row:1/3;font-size:12px;color:#567c7f}.build-tabs button>small{grid-column:2;font-size:11px;color:#5d8487;letter-spacing:.04em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.build-tabs button:hover{border-color:rgba(150,239,240,.4)}.build-tabs button.active{border-color:var(--cyan);background:rgba(150,239,240,.07);box-shadow:0 0 24px rgba(150,239,240,.08)}.build-tabs button.active>span,.build-tabs button.active>small{color:var(--cyan)}.build-card{border:1px solid var(--line);background:linear-gradient(145deg,rgba(10,31,37,.96),rgba(6,21,26,.97));box-shadow:0 20px 55px rgba(0,0,0,.15)}
63+.build-card-head{min-height:72px;display:grid;grid-template-columns:54px 1fr auto;align-items:center;border-bottom:1px solid var(--line)}.member-number{height:100%;display:grid;place-items:center;border-right:1px solid var(--line);font-size:16px;color:#567c7f}.build-card-head>div:nth-child(2){padding:12px 0 12px 16px}.build-card-head h3{font-size:25px;margin:0 0 3px}.build-card-head p{font-size:14px;color:#709194;margin:0}.role-tag{text-align:right;padding:12px 20px}.role-tag small,.role-tag b{display:block}.role-tag small{font-size:12px;color:var(--orange);letter-spacing:.15em;margin-bottom:5px}.role-tag b{font-size:15px;color:#a9c1c0;font-weight:500}
64+.build-columns { display:grid;grid-template-columns:1.15fr .95fr .9fr}.loadout-block{padding:20px;border-right:1px solid var(--line);min-width:0}.loadout-block:last-child{border:0}.loadout-block h4{font-size:15px;letter-spacing:.11em;text-transform:uppercase;margin:0 0 14px;display:flex;align-items:center;gap:8px}.loadout-block h4>span{width:22px;height:22px;display:grid;place-items:center;border:1px solid var(--cyan);color:var(--cyan);font-size:13px;flex:none}.loadout-block h5{font-size:12px;letter-spacing:.16em;color:#618587;margin:20px 0 9px}.weapon-lock{font-size:13px;color:#66888a;line-height:1.45;min-height:24px;margin:0 0 12px}.arts-block ol{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:5px}.arts-block li{display:grid;grid-template-columns:18px 1fr auto;align-items:start;padding:7px 6px;border:1px solid rgba(150,239,240,.08);background:rgba(2,14,17,.35);min-width:0}.arts-block li>span{font-size:12px;color:#4e7477;grid-row:1/3}.arts-block li b{font-size:13px;color:#bfd0ce;line-height:1.3;min-width:0}.arts-block li small{display:block;font-size:11px;color:#527477;line-height:1.3;margin-top:2px}.arts-block li .lvl-badge{grid-row:1/3;grid-column:3;margin:1px 0 0 6px;max-width:108px;text-align:center}
65+.chip-list{display:grid;gap:6px}.chip-list>span{display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid rgba(110,243,197,.2);background:rgba(110,243,197,.05);color:#9ec3b8;padding:7px 9px;font-size:12px;line-height:1.35}.chip-list b{font-weight:500}.chip-list .lvl-badge{margin-left:auto;flex-shrink:0}.stat-priority-list,.plan-reasons{margin:0;padding-left:20px;color:#789698;font-size:12px;line-height:1.55}.am-note{margin:0;display:grid;gap:2px}.am-note b{font-size:13px;color:#dbeae7;font-weight:500}.am-note span{font-size:12px;color:#789698;line-height:1.45}.stat-priority-list{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px}.plan-reasons{display:grid;gap:5px}.empty-loadout{border-left:1px solid var(--orange);padding-left:9px;color:#708f91;font-size:12px;line-height:1.5}
66+.skell-frame{border:1px solid rgba(255,113,79,.2);padding:11px;background:rgba(255,113,79,.04)}.skell-frame small,.skell-frame strong,.skell-frame span{display:block}.skell-frame small{font-size:11px;letter-spacing:.18em;color:#8f6c65}.skell-frame strong{font-size:28px;color:#ff9479;font-weight:300;margin:3px 0}.skell-frame span{font-size:12px;color:#896f6a}.skell-facts{display:grid;gap:0;margin:12px 0 0}.skell-facts>div{border-top:1px solid rgba(150,239,240,.09);padding:9px 0}.skell-facts dt{font-size:11px;letter-spacing:.12em;color:#5f8183;text-transform:uppercase}.skell-facts dd{margin:4px 0 0;color:#9eb5b4;font-size:12px;line-height:1.45}.skell-unavailable{border:1px solid rgba(255,113,79,.2);padding:14px;background:rgba(255,113,79,.04)}.skell-unavailable strong{color:#ff9479;font-size:13px;letter-spacing:.12em}.skell-unavailable p{margin:7px 0 0;color:#896f6a;font-size:13px;line-height:1.5}
67+.skell-alts{margin:12px 0;opacity:.62}.skell-alts>small{display:block;font-size:10px;letter-spacing:.18em;color:#5d8487;text-transform:uppercase;margin-bottom:5px}.skell-alts p{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0;padding:4px 0;border-top:1px solid rgba(150,239,240,.07)}.skell-alts b{font-size:13px;color:#9eb5b4;font-weight:400}.skell-alts span{font-size:11px;color:#537477}
68+.skell-gear-list{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:6px}.skell-gear-list li{display:grid;gap:2px;border-left:2px solid rgba(150,239,240,.18);padding:4px 0 4px 10px}.skell-gear-list b{font-size:13px;color:#dbeae7;font-weight:500}.skell-gear-list small{font-size:11px;color:#5d8487;letter-spacing:.08em;text-transform:uppercase}
69+.lvl-badge { display:inline-block;border:1px solid rgba(150,239,240,.35);color:var(--cyan);font-size:10px;font-style:normal;letter-spacing:.05em;padding:2px 5px;text-decoration:none;line-height:1.35 }
70+.lvl-badge:hover,.lvl-badge:focus-visible{border-color:var(--cyan);background:rgba(150,239,240,.08)}
71+.method-note{display:grid;grid-template-columns:40px 1fr;gap:15px;margin-top:18px;border:1px solid var(--line);padding:20px;background:rgba(7,26,31,.7)}.method-note>span{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--orange);color:var(--orange)}.method-note h3{font-size:16px;margin:2px 0 7px}.method-note p{font-size:14px;line-height:1.65;color:#789698;margin:0;max-width:1200px}
72+footer{max-width:1760px;margin:0 auto;padding:28px 5vw 40px;border-top:1px solid var(--line);position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between}footer b,footer span{display:block}footer b{font-size:14px;letter-spacing:.18em;color:#91adaa}footer span{font-size:12px;color:#537477;margin-top:5px}footer nav{display:flex;gap:17px}footer a{font-size:13px;color:#6b9596;text-decoration:none;border-bottom:1px solid transparent;padding-bottom:3px}footer a:hover{color:var(--cyan);border-color:var(--cyan)}
73+@media(max-width:1300px){.build-columns{grid-template-columns:1fr 1fr}.loadout-block:nth-child(2){border-right:0}.build-columns .skell-block{grid-column:1/-1;border-top:1px solid var(--line);border-right:0}}
74+@media(max-width:1100px){.operator{grid-template-columns:34px minmax(0,1fr) auto}.operator-metrics{grid-column:2/4;border-top:1px solid rgba(150,239,240,.09)}.operator-metrics label{flex:1}}
75+@media(max-width:850px){.builder-grid{grid-template-columns:1fr}.top-status{display:none}.section-code{display:none}.squad-summary{grid-template-columns:1fr}.squad-summary>div{border-right:0;border-bottom:1px solid var(--line)}footer{align-items:flex-start;gap:20px}footer nav{flex-wrap:wrap;justify-content:flex-end}}
76+@media(max-width:560px){.topbar{padding:0 20px}.builder-shell,.results{padding-left:20px;padding-right:20px}.brand small{display:none}.panel{padding:20px}.field-row,.class-readout{grid-template-columns:1fr}.operator{grid-template-columns:28px minmax(0,1fr);padding:7px 0}.operator>select{border-bottom:1px solid rgba(150,239,240,.09)}.operator-state{display:none}.operator-metrics{grid-column:2;display:grid;grid-template-columns:1fr 1fr;border-left:1px solid rgba(150,239,240,.09)}.operator-metrics label{grid-template-columns:1fr 52px;padding:7px}.progression-controls{grid-template-columns:1fr}.build-columns{grid-template-columns:1fr}.skell-block{grid-column:auto}.loadout-block{border-right:0;border-bottom:1px solid var(--line)!important}.build-card-head{grid-template-columns:40px 1fr}.role-tag{display:none}.arts-block ol{grid-template-columns:1fr}.result-meta{display:none}.stat-priority-list{grid-template-columns:1fr}footer{flex-direction:column}footer nav{justify-content:flex-start}}
77+@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}
added app/layout.tsx +38 -0
new file mode 100644
@@ -0,0 +1,38 @@
1+import type { Metadata } from "next";
2+import { Geist, Geist_Mono } from "next/font/google";
3+import "./globals.css";
4+
5+const geistSans = Geist({
6+ variable: "--font-geist-sans",
7+ subsets: ["latin"],
8+});
9+
10+const geistMono = Geist_Mono({
11+ variable: "--font-geist-mono",
12+ subsets: ["latin"],
13+});
14+
15+export const metadata: Metadata = {
16+ title: "BLADE Team Architect — Xenoblade Chronicles X",
17+ description: "A bilingual team and build planner for Xenoblade Chronicles X: Definitive Edition.",
18+ icons: {
19+ icon: "/favicon.svg",
20+ shortcut: "/favicon.svg",
21+ },
22+};
23+
24+export default function RootLayout({
25+ children,
26+}: Readonly<{
27+ children: React.ReactNode;
28+}>) {
29+ return (
30+ <html lang="en">
31+ <body
32+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
33+ >
34+ {children}
35+ </body>
36+ </html>
37+ );
38+}
new file mode 100644
@@ -0,0 +1,38 @@
1+import type { Metadata } from "next";
2+import { Geist, Geist_Mono } from "next/font/google";
3+import "./globals.css";
4+
5+const geistSans = Geist({
6+ variable: "--font-geist-sans",
7+ subsets: ["latin"],
8+});
9+
10+const geistMono = Geist_Mono({
11+ variable: "--font-geist-mono",
12+ subsets: ["latin"],
13+});
14+
15+export const metadata: Metadata = {
16+ title: "BLADE Team Architect — Xenoblade Chronicles X",
17+ description: "A bilingual team and build planner for Xenoblade Chronicles X: Definitive Edition.",
18+ icons: {
19+ icon: "/favicon.svg",
20+ shortcut: "/favicon.svg",
21+ },
22+};
23+
24+export default function RootLayout({
25+ children,
26+}: Readonly<{
27+ children: React.ReactNode;
28+}>) {
29+ return (
30+ <html lang="en">
31+ <body
32+ className={`${geistSans.variable} ${geistMono.variable} antialiased`}
33+ >
34+ {children}
35+ </body>
36+ </html>
37+ );
38+}
added app/page.tsx +5 -0
new file mode 100644
@@ -0,0 +1,5 @@
1+import TeamBuilder from "@/src/components/TeamBuilder";
2+
3+export default function Home() {
4+ return <TeamBuilder />;
5+}
new file mode 100644
@@ -0,0 +1,5 @@
1+import TeamBuilder from "@/src/components/TeamBuilder";
2+
3+export default function Home() {
4+ return <TeamBuilder />;
5+}
added eslint.config.mjs +18 -0
new file mode 100644
@@ -0,0 +1,18 @@
1+import { defineConfig, globalIgnores } from "eslint/config";
2+import nextVitals from "eslint-config-next/core-web-vitals";
3+import nextTs from "eslint-config-next/typescript";
4+
5+const eslintConfig = defineConfig([
6+ ...nextVitals,
7+ ...nextTs,
8+ // Override default ignores of eslint-config-next.
9+ globalIgnores([
10+ // Default ignores of eslint-config-next:
11+ ".next/**",
12+ "out/**",
13+ "build/**",
14+ "next-env.d.ts",
15+ ]),
16+]);
17+
18+export default eslintConfig;
new file mode 100644
@@ -0,0 +1,18 @@
1+import { defineConfig, globalIgnores } from "eslint/config";
2+import nextVitals from "eslint-config-next/core-web-vitals";
3+import nextTs from "eslint-config-next/typescript";
4+
5+const eslintConfig = defineConfig([
6+ ...nextVitals,
7+ ...nextTs,
8+ // Override default ignores of eslint-config-next.
9+ globalIgnores([
10+ // Default ignores of eslint-config-next:
11+ ".next/**",
12+ "out/**",
13+ "build/**",
14+ "next-env.d.ts",
15+ ]),
16+]);
17+
18+export default eslintConfig;
added next.config.ts +9 -0
new file mode 100644
@@ -0,0 +1,9 @@
1+import type { NextConfig } from "next";
2+
3+const nextConfig: NextConfig = {
4+ // Fully static app (all data is client-side): emits a plain `out/` site
5+ // that any static host (Vercel, Render, Netlify, GitHub Pages) can serve.
6+ output: "export",
7+};
8+
9+export default nextConfig;
new file mode 100644
@@ -0,0 +1,9 @@
1+import type { NextConfig } from "next";
2+
3+const nextConfig: NextConfig = {
4+ // Fully static app (all data is client-side): emits a plain `out/` site
5+ // that any static host (Vercel, Render, Netlify, GitHub Pages) can serve.
6+ output: "export",
7+};
8+
9+export default nextConfig;
added package-lock.json +7345 -0
new file mode 100644
@@ -0,0 +1,7345 @@
1+{
2+ "name": "blade-team-architect",
3+ "version": "1.0.0",
4+ "lockfileVersion": 3,
5+ "requires": true,
6+ "packages": {
7+ "": {
8+ "name": "blade-team-architect",
9+ "version": "1.0.0",
10+ "license": "MIT",
11+ "dependencies": {
12+ "next": "^16.2.12",
13+ "react": "^19.2.8",
14+ "react-dom": "^19.2.8"
15+ },
16+ "devDependencies": {
17+ "@tailwindcss/postcss": "^4.3.3",
18+ "@types/node": "^22.19.19",
19+ "@types/react": "^19.2.14",
20+ "@types/react-dom": "^19.2.3",
21+ "eslint": "^9.39.4",
22+ "eslint-config-next": "^16.2.12",
23+ "tailwindcss": "^4.3.3",
24+ "tsx": "^4.23.5",
25+ "typescript": "^5.9.3"
26+ },
27+ "engines": {
28+ "node": ">=20.9.0"
29+ }
30+ },
31+ "node_modules/@alloc/quick-lru": {
32+ "version": "5.2.0",
33+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
34+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
35+ "dev": true,
36+ "license": "MIT",
37+ "engines": {
38+ "node": ">=10"
39+ },
40+ "funding": {
41+ "url": "https://github.com/sponsors/sindresorhus"
42+ }
43+ },
44+ "node_modules/@babel/code-frame": {
45+ "version": "7.29.7",
46+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
47+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
48+ "dev": true,
49+ "license": "MIT",
50+ "dependencies": {
51+ "@babel/helper-validator-identifier": "^7.29.7",
52+ "js-tokens": "^4.0.0",
53+ "picocolors": "^1.1.1"
54+ },
55+ "engines": {
56+ "node": ">=6.9.0"
57+ }
58+ },
59+ "node_modules/@babel/compat-data": {
60+ "version": "7.29.7",
61+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
62+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
63+ "dev": true,
64+ "license": "MIT",
65+ "engines": {
66+ "node": ">=6.9.0"
67+ }
68+ },
69+ "node_modules/@babel/core": {
70+ "version": "7.29.7",
71+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
72+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
73+ "dev": true,
74+ "license": "MIT",
75+ "dependencies": {
76+ "@babel/code-frame": "^7.29.7",
77+ "@babel/generator": "^7.29.7",
78+ "@babel/helper-compilation-targets": "^7.29.7",
79+ "@babel/helper-module-transforms": "^7.29.7",
80+ "@babel/helpers": "^7.29.7",
81+ "@babel/parser": "^7.29.7",
82+ "@babel/template": "^7.29.7",
83+ "@babel/traverse": "^7.29.7",
84+ "@babel/types": "^7.29.7",
85+ "@jridgewell/remapping": "^2.3.5",
86+ "convert-source-map": "^2.0.0",
87+ "debug": "^4.1.0",
88+ "gensync": "^1.0.0-beta.2",
89+ "json5": "^2.2.3",
90+ "semver": "^6.3.1"
91+ },
92+ "engines": {
93+ "node": ">=6.9.0"
94+ },
95+ "funding": {
96+ "type": "opencollective",
97+ "url": "https://opencollective.com/babel"
98+ }
99+ },
100+ "node_modules/@babel/generator": {
101+ "version": "7.29.8",
102+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
103+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
104+ "dev": true,
105+ "license": "MIT",
106+ "dependencies": {
107+ "@babel/parser": "^7.29.8",
108+ "@babel/types": "^7.29.8",
109+ "@jridgewell/gen-mapping": "^0.3.12",
110+ "@jridgewell/trace-mapping": "^0.3.28",
111+ "jsesc": "^3.0.2"
112+ },
113+ "engines": {
114+ "node": ">=6.9.0"
115+ }
116+ },
117+ "node_modules/@babel/helper-compilation-targets": {
118+ "version": "7.29.7",
119+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
120+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
121+ "dev": true,
122+ "license": "MIT",
123+ "dependencies": {
124+ "@babel/compat-data": "^7.29.7",
125+ "@babel/helper-validator-option": "^7.29.7",
126+ "browserslist": "^4.24.0",
127+ "lru-cache": "^5.1.1",
128+ "semver": "^6.3.1"
129+ },
130+ "engines": {
131+ "node": ">=6.9.0"
132+ }
133+ },
134+ "node_modules/@babel/helper-globals": {
135+ "version": "7.29.7",
136+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
137+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
138+ "dev": true,
139+ "license": "MIT",
140+ "engines": {
141+ "node": ">=6.9.0"
142+ }
143+ },
144+ "node_modules/@babel/helper-module-imports": {
145+ "version": "7.29.7",
146+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
147+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
148+ "dev": true,
149+ "license": "MIT",
150+ "dependencies": {
151+ "@babel/traverse": "^7.29.7",
152+ "@babel/types": "^7.29.7"
153+ },
154+ "engines": {
155+ "node": ">=6.9.0"
156+ }
157+ },
158+ "node_modules/@babel/helper-module-transforms": {
159+ "version": "7.29.7",
160+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
161+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
162+ "dev": true,
163+ "license": "MIT",
164+ "dependencies": {
165+ "@babel/helper-module-imports": "^7.29.7",
166+ "@babel/helper-validator-identifier": "^7.29.7",
167+ "@babel/traverse": "^7.29.7"
168+ },
169+ "engines": {
170+ "node": ">=6.9.0"
171+ },
172+ "peerDependencies": {
173+ "@babel/core": "^7.0.0"
174+ }
175+ },
176+ "node_modules/@babel/helper-string-parser": {
177+ "version": "7.29.7",
178+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
179+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
180+ "dev": true,
181+ "license": "MIT",
182+ "engines": {
183+ "node": ">=6.9.0"
184+ }
185+ },
186+ "node_modules/@babel/helper-validator-identifier": {
187+ "version": "7.29.7",
188+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
189+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
190+ "dev": true,
191+ "license": "MIT",
192+ "engines": {
193+ "node": ">=6.9.0"
194+ }
195+ },
196+ "node_modules/@babel/helper-validator-option": {
197+ "version": "7.29.7",
198+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
199+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
200+ "dev": true,
201+ "license": "MIT",
202+ "engines": {
203+ "node": ">=6.9.0"
204+ }
205+ },
206+ "node_modules/@babel/helpers": {
207+ "version": "7.29.7",
208+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
209+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
210+ "dev": true,
211+ "license": "MIT",
212+ "dependencies": {
213+ "@babel/template": "^7.29.7",
214+ "@babel/types": "^7.29.7"
215+ },
216+ "engines": {
217+ "node": ">=6.9.0"
218+ }
219+ },
220+ "node_modules/@babel/parser": {
221+ "version": "7.29.8",
222+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
223+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
224+ "dev": true,
225+ "license": "MIT",
226+ "dependencies": {
227+ "@babel/types": "^7.29.8"
228+ },
229+ "bin": {
230+ "parser": "bin/babel-parser.js"
231+ },
232+ "engines": {
233+ "node": ">=6.0.0"
234+ }
235+ },
236+ "node_modules/@babel/template": {
237+ "version": "7.29.7",
238+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
239+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
240+ "dev": true,
241+ "license": "MIT",
242+ "dependencies": {
243+ "@babel/code-frame": "^7.29.7",
244+ "@babel/parser": "^7.29.7",
245+ "@babel/types": "^7.29.7"
246+ },
247+ "engines": {
248+ "node": ">=6.9.0"
249+ }
250+ },
251+ "node_modules/@babel/traverse": {
252+ "version": "7.29.8",
253+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
254+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
255+ "dev": true,
256+ "license": "MIT",
257+ "dependencies": {
258+ "@babel/code-frame": "^7.29.7",
259+ "@babel/generator": "^7.29.8",
260+ "@babel/helper-globals": "^7.29.7",
261+ "@babel/parser": "^7.29.8",
262+ "@babel/template": "^7.29.7",
263+ "@babel/types": "^7.29.8",
264+ "debug": "^4.3.1"
265+ },
266+ "engines": {
267+ "node": ">=6.9.0"
268+ }
269+ },
270+ "node_modules/@babel/types": {
271+ "version": "7.29.8",
272+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
273+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
274+ "dev": true,
275+ "license": "MIT",
276+ "dependencies": {
277+ "@babel/helper-string-parser": "^7.29.7",
278+ "@babel/helper-validator-identifier": "^7.29.7"
279+ },
280+ "engines": {
281+ "node": ">=6.9.0"
282+ }
283+ },
284+ "node_modules/@emnapi/core": {
285+ "version": "1.10.0",
286+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
287+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
288+ "dev": true,
289+ "license": "MIT",
290+ "optional": true,
291+ "dependencies": {
292+ "@emnapi/wasi-threads": "1.2.1",
293+ "tslib": "^2.4.0"
294+ }
295+ },
296+ "node_modules/@emnapi/runtime": {
297+ "version": "1.11.3",
298+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
299+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
300+ "license": "MIT",
301+ "optional": true,
302+ "dependencies": {
303+ "tslib": "^2.4.0"
304+ }
305+ },
306+ "node_modules/@emnapi/wasi-threads": {
307+ "version": "1.2.1",
308+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
309+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
310+ "dev": true,
311+ "license": "MIT",
312+ "optional": true,
313+ "dependencies": {
314+ "tslib": "^2.4.0"
315+ }
316+ },
317+ "node_modules/@esbuild/aix-ppc64": {
318+ "version": "0.28.1",
319+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
320+ "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
321+ "cpu": [
322+ "ppc64"
323+ ],
324+ "dev": true,
325+ "license": "MIT",
326+ "optional": true,
327+ "os": [
328+ "aix"
329+ ],
330+ "engines": {
331+ "node": ">=18"
332+ }
333+ },
334+ "node_modules/@esbuild/android-arm": {
335+ "version": "0.28.1",
336+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
337+ "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
338+ "cpu": [
339+ "arm"
340+ ],
341+ "dev": true,
342+ "license": "MIT",
343+ "optional": true,
344+ "os": [
345+ "android"
346+ ],
347+ "engines": {
348+ "node": ">=18"
349+ }
350+ },
351+ "node_modules/@esbuild/android-arm64": {
352+ "version": "0.28.1",
353+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
354+ "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
355+ "cpu": [
356+ "arm64"
357+ ],
358+ "dev": true,
359+ "license": "MIT",
360+ "optional": true,
361+ "os": [
362+ "android"
363+ ],
364+ "engines": {
365+ "node": ">=18"
366+ }
367+ },
368+ "node_modules/@esbuild/android-x64": {
369+ "version": "0.28.1",
370+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
371+ "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
372+ "cpu": [
373+ "x64"
374+ ],
375+ "dev": true,
376+ "license": "MIT",
377+ "optional": true,
378+ "os": [
379+ "android"
380+ ],
381+ "engines": {
382+ "node": ">=18"
383+ }
384+ },
385+ "node_modules/@esbuild/darwin-arm64": {
386+ "version": "0.28.1",
387+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
388+ "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
389+ "cpu": [
390+ "arm64"
391+ ],
392+ "dev": true,
393+ "license": "MIT",
394+ "optional": true,
395+ "os": [
396+ "darwin"
397+ ],
398+ "engines": {
399+ "node": ">=18"
400+ }
401+ },
402+ "node_modules/@esbuild/darwin-x64": {
403+ "version": "0.28.1",
404+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
405+ "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
406+ "cpu": [
407+ "x64"
408+ ],
409+ "dev": true,
410+ "license": "MIT",
411+ "optional": true,
412+ "os": [
413+ "darwin"
414+ ],
415+ "engines": {
416+ "node": ">=18"
417+ }
418+ },
419+ "node_modules/@esbuild/freebsd-arm64": {
420+ "version": "0.28.1",
421+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
422+ "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
423+ "cpu": [
424+ "arm64"
425+ ],
426+ "dev": true,
427+ "license": "MIT",
428+ "optional": true,
429+ "os": [
430+ "freebsd"
431+ ],
432+ "engines": {
433+ "node": ">=18"
434+ }
435+ },
436+ "node_modules/@esbuild/freebsd-x64": {
437+ "version": "0.28.1",
438+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
439+ "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
440+ "cpu": [
441+ "x64"
442+ ],
443+ "dev": true,
444+ "license": "MIT",
445+ "optional": true,
446+ "os": [
447+ "freebsd"
448+ ],
449+ "engines": {
450+ "node": ">=18"
451+ }
452+ },
453+ "node_modules/@esbuild/linux-arm": {
454+ "version": "0.28.1",
455+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
456+ "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
457+ "cpu": [
458+ "arm"
459+ ],
460+ "dev": true,
461+ "license": "MIT",
462+ "optional": true,
463+ "os": [
464+ "linux"
465+ ],
466+ "engines": {
467+ "node": ">=18"
468+ }
469+ },
470+ "node_modules/@esbuild/linux-arm64": {
471+ "version": "0.28.1",
472+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
473+ "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
474+ "cpu": [
475+ "arm64"
476+ ],
477+ "dev": true,
478+ "license": "MIT",
479+ "optional": true,
480+ "os": [
481+ "linux"
482+ ],
483+ "engines": {
484+ "node": ">=18"
485+ }
486+ },
487+ "node_modules/@esbuild/linux-ia32": {
488+ "version": "0.28.1",
489+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
490+ "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
491+ "cpu": [
492+ "ia32"
493+ ],
494+ "dev": true,
495+ "license": "MIT",
496+ "optional": true,
497+ "os": [
498+ "linux"
499+ ],
500+ "engines": {
501+ "node": ">=18"
502+ }
503+ },
504+ "node_modules/@esbuild/linux-loong64": {
505+ "version": "0.28.1",
506+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
507+ "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
508+ "cpu": [
509+ "loong64"
510+ ],
511+ "dev": true,
512+ "license": "MIT",
513+ "optional": true,
514+ "os": [
515+ "linux"
516+ ],
517+ "engines": {
518+ "node": ">=18"
519+ }
520+ },
521+ "node_modules/@esbuild/linux-mips64el": {
522+ "version": "0.28.1",
523+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
524+ "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
525+ "cpu": [
526+ "mips64el"
527+ ],
528+ "dev": true,
529+ "license": "MIT",
530+ "optional": true,
531+ "os": [
532+ "linux"
533+ ],
534+ "engines": {
535+ "node": ">=18"
536+ }
537+ },
538+ "node_modules/@esbuild/linux-ppc64": {
539+ "version": "0.28.1",
540+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
541+ "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
542+ "cpu": [
543+ "ppc64"
544+ ],
545+ "dev": true,
546+ "license": "MIT",
547+ "optional": true,
548+ "os": [
549+ "linux"
550+ ],
551+ "engines": {
552+ "node": ">=18"
553+ }
554+ },
555+ "node_modules/@esbuild/linux-riscv64": {
556+ "version": "0.28.1",
557+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
558+ "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
559+ "cpu": [
560+ "riscv64"
561+ ],
562+ "dev": true,
563+ "license": "MIT",
564+ "optional": true,
565+ "os": [
566+ "linux"
567+ ],
568+ "engines": {
569+ "node": ">=18"
570+ }
571+ },
572+ "node_modules/@esbuild/linux-s390x": {
573+ "version": "0.28.1",
574+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
575+ "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
576+ "cpu": [
577+ "s390x"
578+ ],
579+ "dev": true,
580+ "license": "MIT",
581+ "optional": true,
582+ "os": [
583+ "linux"
584+ ],
585+ "engines": {
586+ "node": ">=18"
587+ }
588+ },
589+ "node_modules/@esbuild/linux-x64": {
590+ "version": "0.28.1",
591+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
592+ "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
593+ "cpu": [
594+ "x64"
595+ ],
596+ "dev": true,
597+ "license": "MIT",
598+ "optional": true,
599+ "os": [
600+ "linux"
601+ ],
602+ "engines": {
603+ "node": ">=18"
604+ }
605+ },
606+ "node_modules/@esbuild/netbsd-arm64": {
607+ "version": "0.28.1",
608+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
609+ "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
610+ "cpu": [
611+ "arm64"
612+ ],
613+ "dev": true,
614+ "license": "MIT",
615+ "optional": true,
616+ "os": [
617+ "netbsd"
618+ ],
619+ "engines": {
620+ "node": ">=18"
621+ }
622+ },
623+ "node_modules/@esbuild/netbsd-x64": {
624+ "version": "0.28.1",
625+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
626+ "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
627+ "cpu": [
628+ "x64"
629+ ],
630+ "dev": true,
631+ "license": "MIT",
632+ "optional": true,
633+ "os": [
634+ "netbsd"
635+ ],
636+ "engines": {
637+ "node": ">=18"
638+ }
639+ },
640+ "node_modules/@esbuild/openbsd-arm64": {
641+ "version": "0.28.1",
642+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
643+ "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
644+ "cpu": [
645+ "arm64"
646+ ],
647+ "dev": true,
648+ "license": "MIT",
649+ "optional": true,
650+ "os": [
651+ "openbsd"
652+ ],
653+ "engines": {
654+ "node": ">=18"
655+ }
656+ },
657+ "node_modules/@esbuild/openbsd-x64": {
658+ "version": "0.28.1",
659+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
660+ "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
661+ "cpu": [
662+ "x64"
663+ ],
664+ "dev": true,
665+ "license": "MIT",
666+ "optional": true,
667+ "os": [
668+ "openbsd"
669+ ],
670+ "engines": {
671+ "node": ">=18"
672+ }
673+ },
674+ "node_modules/@esbuild/openharmony-arm64": {
675+ "version": "0.28.1",
676+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
677+ "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
678+ "cpu": [
679+ "arm64"
680+ ],
681+ "dev": true,
682+ "license": "MIT",
683+ "optional": true,
684+ "os": [
685+ "openharmony"
686+ ],
687+ "engines": {
688+ "node": ">=18"
689+ }
690+ },
691+ "node_modules/@esbuild/sunos-x64": {
692+ "version": "0.28.1",
693+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
694+ "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
695+ "cpu": [
696+ "x64"
697+ ],
698+ "dev": true,
699+ "license": "MIT",
700+ "optional": true,
701+ "os": [
702+ "sunos"
703+ ],
704+ "engines": {
705+ "node": ">=18"
706+ }
707+ },
708+ "node_modules/@esbuild/win32-arm64": {
709+ "version": "0.28.1",
710+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
711+ "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
712+ "cpu": [
713+ "arm64"
714+ ],
715+ "dev": true,
716+ "license": "MIT",
717+ "optional": true,
718+ "os": [
719+ "win32"
720+ ],
721+ "engines": {
722+ "node": ">=18"
723+ }
724+ },
725+ "node_modules/@esbuild/win32-ia32": {
726+ "version": "0.28.1",
727+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
728+ "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
729+ "cpu": [
730+ "ia32"
731+ ],
732+ "dev": true,
733+ "license": "MIT",
734+ "optional": true,
735+ "os": [
736+ "win32"
737+ ],
738+ "engines": {
739+ "node": ">=18"
740+ }
741+ },
742+ "node_modules/@esbuild/win32-x64": {
743+ "version": "0.28.1",
744+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
745+ "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
746+ "cpu": [
747+ "x64"
748+ ],
749+ "dev": true,
750+ "license": "MIT",
751+ "optional": true,
752+ "os": [
753+ "win32"
754+ ],
755+ "engines": {
756+ "node": ">=18"
757+ }
758+ },
759+ "node_modules/@eslint-community/eslint-utils": {
760+ "version": "4.10.1",
761+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
762+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
763+ "dev": true,
764+ "license": "MIT",
765+ "dependencies": {
766+ "eslint-visitor-keys": "^3.4.3"
767+ },
768+ "engines": {
769+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
770+ },
771+ "funding": {
772+ "url": "https://opencollective.com/eslint"
773+ },
774+ "peerDependencies": {
775+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
776+ }
777+ },
778+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
779+ "version": "3.4.3",
780+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
781+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
782+ "dev": true,
783+ "license": "Apache-2.0",
784+ "engines": {
785+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
786+ },
787+ "funding": {
788+ "url": "https://opencollective.com/eslint"
789+ }
790+ },
791+ "node_modules/@eslint-community/regexpp": {
792+ "version": "4.12.2",
793+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
794+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
795+ "dev": true,
796+ "license": "MIT",
797+ "engines": {
798+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
799+ }
800+ },
801+ "node_modules/@eslint/config-array": {
802+ "version": "0.21.2",
803+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
804+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
805+ "dev": true,
806+ "license": "Apache-2.0",
807+ "dependencies": {
808+ "@eslint/object-schema": "^2.1.7",
809+ "debug": "^4.3.1",
810+ "minimatch": "^3.1.5"
811+ },
812+ "engines": {
813+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
814+ }
815+ },
816+ "node_modules/@eslint/config-helpers": {
817+ "version": "0.4.2",
818+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
819+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
820+ "dev": true,
821+ "license": "Apache-2.0",
822+ "dependencies": {
823+ "@eslint/core": "^0.17.0"
824+ },
825+ "engines": {
826+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
827+ }
828+ },
829+ "node_modules/@eslint/core": {
830+ "version": "0.17.0",
831+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
832+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
833+ "dev": true,
834+ "license": "Apache-2.0",
835+ "dependencies": {
836+ "@types/json-schema": "^7.0.15"
837+ },
838+ "engines": {
839+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
840+ }
841+ },
842+ "node_modules/@eslint/eslintrc": {
843+ "version": "3.3.6",
844+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
845+ "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
846+ "dev": true,
847+ "license": "MIT",
848+ "dependencies": {
849+ "ajv": "^6.14.0",
850+ "debug": "^4.3.2",
851+ "espree": "^10.0.1",
852+ "globals": "^14.0.0",
853+ "ignore": "^5.2.0",
854+ "import-fresh": "^3.2.1",
855+ "js-yaml": "^4.3.0",
856+ "minimatch": "^3.1.5",
857+ "strip-json-comments": "^3.1.1"
858+ },
859+ "engines": {
860+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
861+ },
862+ "funding": {
863+ "url": "https://opencollective.com/eslint"
864+ }
865+ },
866+ "node_modules/@eslint/js": {
867+ "version": "9.39.5",
868+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
869+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
870+ "dev": true,
871+ "license": "MIT",
872+ "engines": {
873+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
874+ },
875+ "funding": {
876+ "url": "https://eslint.org/donate"
877+ }
878+ },
879+ "node_modules/@eslint/object-schema": {
880+ "version": "2.1.7",
881+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
882+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
883+ "dev": true,
884+ "license": "Apache-2.0",
885+ "engines": {
886+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
887+ }
888+ },
889+ "node_modules/@eslint/plugin-kit": {
890+ "version": "0.4.1",
891+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
892+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
893+ "dev": true,
894+ "license": "Apache-2.0",
895+ "dependencies": {
896+ "@eslint/core": "^0.17.0",
897+ "levn": "^0.4.1"
898+ },
899+ "engines": {
900+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
901+ }
902+ },
903+ "node_modules/@humanfs/core": {
904+ "version": "0.19.2",
905+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
906+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
907+ "dev": true,
908+ "license": "Apache-2.0",
909+ "dependencies": {
910+ "@humanfs/types": "^0.15.0"
911+ },
912+ "engines": {
913+ "node": ">=18.18.0"
914+ }
915+ },
916+ "node_modules/@humanfs/node": {
917+ "version": "0.16.8",
918+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
919+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
920+ "dev": true,
921+ "license": "Apache-2.0",
922+ "dependencies": {
923+ "@humanfs/core": "^0.19.2",
924+ "@humanfs/types": "^0.15.0",
925+ "@humanwhocodes/retry": "^0.4.0"
926+ },
927+ "engines": {
928+ "node": ">=18.18.0"
929+ }
930+ },
931+ "node_modules/@humanfs/types": {
932+ "version": "0.15.0",
933+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
934+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
935+ "dev": true,
936+ "license": "Apache-2.0",
937+ "engines": {
938+ "node": ">=18.18.0"
939+ }
940+ },
941+ "node_modules/@humanwhocodes/module-importer": {
942+ "version": "1.0.1",
943+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
944+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
945+ "dev": true,
946+ "license": "Apache-2.0",
947+ "engines": {
948+ "node": ">=12.22"
949+ },
950+ "funding": {
951+ "type": "github",
952+ "url": "https://github.com/sponsors/nzakas"
953+ }
954+ },
955+ "node_modules/@humanwhocodes/retry": {
956+ "version": "0.4.3",
957+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
958+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
959+ "dev": true,
960+ "license": "Apache-2.0",
961+ "engines": {
962+ "node": ">=18.18"
963+ },
964+ "funding": {
965+ "type": "github",
966+ "url": "https://github.com/sponsors/nzakas"
967+ }
968+ },
969+ "node_modules/@img/colour": {
970+ "version": "1.1.0",
971+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
972+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
973+ "license": "MIT",
974+ "optional": true,
975+ "engines": {
976+ "node": ">=18"
977+ }
978+ },
979+ "node_modules/@img/sharp-darwin-arm64": {
980+ "version": "0.34.5",
981+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
982+ "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
983+ "cpu": [
984+ "arm64"
985+ ],
986+ "license": "Apache-2.0",
987+ "optional": true,
988+ "os": [
989+ "darwin"
990+ ],
991+ "engines": {
992+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
993+ },
994+ "funding": {
995+ "url": "https://opencollective.com/libvips"
996+ },
997+ "optionalDependencies": {
998+ "@img/sharp-libvips-darwin-arm64": "1.2.4"
999+ }
1000+ },
1001+ "node_modules/@img/sharp-darwin-x64": {
1002+ "version": "0.34.5",
1003+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
1004+ "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
1005+ "cpu": [
1006+ "x64"
1007+ ],
1008+ "license": "Apache-2.0",
1009+ "optional": true,
1010+ "os": [
1011+ "darwin"
1012+ ],
1013+ "engines": {
1014+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1015+ },
1016+ "funding": {
1017+ "url": "https://opencollective.com/libvips"
1018+ },
1019+ "optionalDependencies": {
1020+ "@img/sharp-libvips-darwin-x64": "1.2.4"
1021+ }
1022+ },
1023+ "node_modules/@img/sharp-libvips-darwin-arm64": {
1024+ "version": "1.2.4",
1025+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
1026+ "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
1027+ "cpu": [
1028+ "arm64"
1029+ ],
1030+ "license": "LGPL-3.0-or-later",
1031+ "optional": true,
1032+ "os": [
1033+ "darwin"
1034+ ],
1035+ "funding": {
1036+ "url": "https://opencollective.com/libvips"
1037+ }
1038+ },
1039+ "node_modules/@img/sharp-libvips-darwin-x64": {
1040+ "version": "1.2.4",
1041+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
1042+ "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
1043+ "cpu": [
1044+ "x64"
1045+ ],
1046+ "license": "LGPL-3.0-or-later",
1047+ "optional": true,
1048+ "os": [
1049+ "darwin"
1050+ ],
1051+ "funding": {
1052+ "url": "https://opencollective.com/libvips"
1053+ }
1054+ },
1055+ "node_modules/@img/sharp-libvips-linux-arm": {
1056+ "version": "1.2.4",
1057+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
1058+ "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
1059+ "cpu": [
1060+ "arm"
1061+ ],
1062+ "libc": [
1063+ "glibc"
1064+ ],
1065+ "license": "LGPL-3.0-or-later",
1066+ "optional": true,
1067+ "os": [
1068+ "linux"
1069+ ],
1070+ "funding": {
1071+ "url": "https://opencollective.com/libvips"
1072+ }
1073+ },
1074+ "node_modules/@img/sharp-libvips-linux-arm64": {
1075+ "version": "1.2.4",
1076+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
1077+ "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
1078+ "cpu": [
1079+ "arm64"
1080+ ],
1081+ "libc": [
1082+ "glibc"
1083+ ],
1084+ "license": "LGPL-3.0-or-later",
1085+ "optional": true,
1086+ "os": [
1087+ "linux"
1088+ ],
1089+ "funding": {
1090+ "url": "https://opencollective.com/libvips"
1091+ }
1092+ },
1093+ "node_modules/@img/sharp-libvips-linux-ppc64": {
1094+ "version": "1.2.4",
1095+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
1096+ "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
1097+ "cpu": [
1098+ "ppc64"
1099+ ],
1100+ "libc": [
1101+ "glibc"
1102+ ],
1103+ "license": "LGPL-3.0-or-later",
1104+ "optional": true,
1105+ "os": [
1106+ "linux"
1107+ ],
1108+ "funding": {
1109+ "url": "https://opencollective.com/libvips"
1110+ }
1111+ },
1112+ "node_modules/@img/sharp-libvips-linux-riscv64": {
1113+ "version": "1.2.4",
1114+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
1115+ "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
1116+ "cpu": [
1117+ "riscv64"
1118+ ],
1119+ "libc": [
1120+ "glibc"
1121+ ],
1122+ "license": "LGPL-3.0-or-later",
1123+ "optional": true,
1124+ "os": [
1125+ "linux"
1126+ ],
1127+ "funding": {
1128+ "url": "https://opencollective.com/libvips"
1129+ }
1130+ },
1131+ "node_modules/@img/sharp-libvips-linux-s390x": {
1132+ "version": "1.2.4",
1133+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
1134+ "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
1135+ "cpu": [
1136+ "s390x"
1137+ ],
1138+ "libc": [
1139+ "glibc"
1140+ ],
1141+ "license": "LGPL-3.0-or-later",
1142+ "optional": true,
1143+ "os": [
1144+ "linux"
1145+ ],
1146+ "funding": {
1147+ "url": "https://opencollective.com/libvips"
1148+ }
1149+ },
1150+ "node_modules/@img/sharp-libvips-linux-x64": {
1151+ "version": "1.2.4",
1152+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
1153+ "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
1154+ "cpu": [
1155+ "x64"
1156+ ],
1157+ "libc": [
1158+ "glibc"
1159+ ],
1160+ "license": "LGPL-3.0-or-later",
1161+ "optional": true,
1162+ "os": [
1163+ "linux"
1164+ ],
1165+ "funding": {
1166+ "url": "https://opencollective.com/libvips"
1167+ }
1168+ },
1169+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
1170+ "version": "1.2.4",
1171+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
1172+ "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
1173+ "cpu": [
1174+ "arm64"
1175+ ],
1176+ "libc": [
1177+ "musl"
1178+ ],
1179+ "license": "LGPL-3.0-or-later",
1180+ "optional": true,
1181+ "os": [
1182+ "linux"
1183+ ],
1184+ "funding": {
1185+ "url": "https://opencollective.com/libvips"
1186+ }
1187+ },
1188+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
1189+ "version": "1.2.4",
1190+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
1191+ "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
1192+ "cpu": [
1193+ "x64"
1194+ ],
1195+ "libc": [
1196+ "musl"
1197+ ],
1198+ "license": "LGPL-3.0-or-later",
1199+ "optional": true,
1200+ "os": [
1201+ "linux"
1202+ ],
1203+ "funding": {
1204+ "url": "https://opencollective.com/libvips"
1205+ }
1206+ },
1207+ "node_modules/@img/sharp-linux-arm": {
1208+ "version": "0.34.5",
1209+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
1210+ "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
1211+ "cpu": [
1212+ "arm"
1213+ ],
1214+ "libc": [
1215+ "glibc"
1216+ ],
1217+ "license": "Apache-2.0",
1218+ "optional": true,
1219+ "os": [
1220+ "linux"
1221+ ],
1222+ "engines": {
1223+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1224+ },
1225+ "funding": {
1226+ "url": "https://opencollective.com/libvips"
1227+ },
1228+ "optionalDependencies": {
1229+ "@img/sharp-libvips-linux-arm": "1.2.4"
1230+ }
1231+ },
1232+ "node_modules/@img/sharp-linux-arm64": {
1233+ "version": "0.34.5",
1234+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
1235+ "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
1236+ "cpu": [
1237+ "arm64"
1238+ ],
1239+ "libc": [
1240+ "glibc"
1241+ ],
1242+ "license": "Apache-2.0",
1243+ "optional": true,
1244+ "os": [
1245+ "linux"
1246+ ],
1247+ "engines": {
1248+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1249+ },
1250+ "funding": {
1251+ "url": "https://opencollective.com/libvips"
1252+ },
1253+ "optionalDependencies": {
1254+ "@img/sharp-libvips-linux-arm64": "1.2.4"
1255+ }
1256+ },
1257+ "node_modules/@img/sharp-linux-ppc64": {
1258+ "version": "0.34.5",
1259+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
1260+ "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
1261+ "cpu": [
1262+ "ppc64"
1263+ ],
1264+ "libc": [
1265+ "glibc"
1266+ ],
1267+ "license": "Apache-2.0",
1268+ "optional": true,
1269+ "os": [
1270+ "linux"
1271+ ],
1272+ "engines": {
1273+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1274+ },
1275+ "funding": {
1276+ "url": "https://opencollective.com/libvips"
1277+ },
1278+ "optionalDependencies": {
1279+ "@img/sharp-libvips-linux-ppc64": "1.2.4"
1280+ }
1281+ },
1282+ "node_modules/@img/sharp-linux-riscv64": {
1283+ "version": "0.34.5",
1284+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
1285+ "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
1286+ "cpu": [
1287+ "riscv64"
1288+ ],
1289+ "libc": [
1290+ "glibc"
1291+ ],
1292+ "license": "Apache-2.0",
1293+ "optional": true,
1294+ "os": [
1295+ "linux"
1296+ ],
1297+ "engines": {
1298+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1299+ },
1300+ "funding": {
1301+ "url": "https://opencollective.com/libvips"
1302+ },
1303+ "optionalDependencies": {
1304+ "@img/sharp-libvips-linux-riscv64": "1.2.4"
1305+ }
1306+ },
1307+ "node_modules/@img/sharp-linux-s390x": {
1308+ "version": "0.34.5",
1309+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
1310+ "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
1311+ "cpu": [
1312+ "s390x"
1313+ ],
1314+ "libc": [
1315+ "glibc"
1316+ ],
1317+ "license": "Apache-2.0",
1318+ "optional": true,
1319+ "os": [
1320+ "linux"
1321+ ],
1322+ "engines": {
1323+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1324+ },
1325+ "funding": {
1326+ "url": "https://opencollective.com/libvips"
1327+ },
1328+ "optionalDependencies": {
1329+ "@img/sharp-libvips-linux-s390x": "1.2.4"
1330+ }
1331+ },
1332+ "node_modules/@img/sharp-linux-x64": {
1333+ "version": "0.34.5",
1334+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
1335+ "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
1336+ "cpu": [
1337+ "x64"
1338+ ],
1339+ "libc": [
1340+ "glibc"
1341+ ],
1342+ "license": "Apache-2.0",
1343+ "optional": true,
1344+ "os": [
1345+ "linux"
1346+ ],
1347+ "engines": {
1348+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1349+ },
1350+ "funding": {
1351+ "url": "https://opencollective.com/libvips"
1352+ },
1353+ "optionalDependencies": {
1354+ "@img/sharp-libvips-linux-x64": "1.2.4"
1355+ }
1356+ },
1357+ "node_modules/@img/sharp-linuxmusl-arm64": {
1358+ "version": "0.34.5",
1359+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
1360+ "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
1361+ "cpu": [
1362+ "arm64"
1363+ ],
1364+ "libc": [
1365+ "musl"
1366+ ],
1367+ "license": "Apache-2.0",
1368+ "optional": true,
1369+ "os": [
1370+ "linux"
1371+ ],
1372+ "engines": {
1373+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1374+ },
1375+ "funding": {
1376+ "url": "https://opencollective.com/libvips"
1377+ },
1378+ "optionalDependencies": {
1379+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
1380+ }
1381+ },
1382+ "node_modules/@img/sharp-linuxmusl-x64": {
1383+ "version": "0.34.5",
1384+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
1385+ "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
1386+ "cpu": [
1387+ "x64"
1388+ ],
1389+ "libc": [
1390+ "musl"
1391+ ],
1392+ "license": "Apache-2.0",
1393+ "optional": true,
1394+ "os": [
1395+ "linux"
1396+ ],
1397+ "engines": {
1398+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1399+ },
1400+ "funding": {
1401+ "url": "https://opencollective.com/libvips"
1402+ },
1403+ "optionalDependencies": {
1404+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
1405+ }
1406+ },
1407+ "node_modules/@img/sharp-wasm32": {
1408+ "version": "0.34.5",
1409+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
1410+ "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
1411+ "cpu": [
1412+ "wasm32"
1413+ ],
1414+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
1415+ "optional": true,
1416+ "dependencies": {
1417+ "@emnapi/runtime": "^1.7.0"
1418+ },
1419+ "engines": {
1420+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1421+ },
1422+ "funding": {
1423+ "url": "https://opencollective.com/libvips"
1424+ }
1425+ },
1426+ "node_modules/@img/sharp-win32-arm64": {
1427+ "version": "0.34.5",
1428+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
1429+ "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
1430+ "cpu": [
1431+ "arm64"
1432+ ],
1433+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1434+ "optional": true,
1435+ "os": [
1436+ "win32"
1437+ ],
1438+ "engines": {
1439+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1440+ },
1441+ "funding": {
1442+ "url": "https://opencollective.com/libvips"
1443+ }
1444+ },
1445+ "node_modules/@img/sharp-win32-ia32": {
1446+ "version": "0.34.5",
1447+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
1448+ "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
1449+ "cpu": [
1450+ "ia32"
1451+ ],
1452+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1453+ "optional": true,
1454+ "os": [
1455+ "win32"
1456+ ],
1457+ "engines": {
1458+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1459+ },
1460+ "funding": {
1461+ "url": "https://opencollective.com/libvips"
1462+ }
1463+ },
1464+ "node_modules/@img/sharp-win32-x64": {
1465+ "version": "0.34.5",
1466+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
1467+ "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
1468+ "cpu": [
1469+ "x64"
1470+ ],
1471+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1472+ "optional": true,
1473+ "os": [
1474+ "win32"
1475+ ],
1476+ "engines": {
1477+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1478+ },
1479+ "funding": {
1480+ "url": "https://opencollective.com/libvips"
1481+ }
1482+ },
1483+ "node_modules/@jridgewell/gen-mapping": {
1484+ "version": "0.3.13",
1485+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
1486+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
1487+ "dev": true,
1488+ "license": "MIT",
1489+ "dependencies": {
1490+ "@jridgewell/sourcemap-codec": "^1.5.0",
1491+ "@jridgewell/trace-mapping": "^0.3.24"
1492+ }
1493+ },
1494+ "node_modules/@jridgewell/remapping": {
1495+ "version": "2.3.5",
1496+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
1497+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
1498+ "dev": true,
1499+ "license": "MIT",
1500+ "dependencies": {
1501+ "@jridgewell/gen-mapping": "^0.3.5",
1502+ "@jridgewell/trace-mapping": "^0.3.24"
1503+ }
1504+ },
1505+ "node_modules/@jridgewell/resolve-uri": {
1506+ "version": "3.1.2",
1507+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
1508+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
1509+ "dev": true,
1510+ "license": "MIT",
1511+ "engines": {
1512+ "node": ">=6.0.0"
1513+ }
1514+ },
1515+ "node_modules/@jridgewell/sourcemap-codec": {
1516+ "version": "1.5.5",
1517+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
1518+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
1519+ "dev": true,
1520+ "license": "MIT"
1521+ },
1522+ "node_modules/@jridgewell/trace-mapping": {
1523+ "version": "0.3.31",
1524+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
1525+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
1526+ "dev": true,
1527+ "license": "MIT",
1528+ "dependencies": {
1529+ "@jridgewell/resolve-uri": "^3.1.0",
1530+ "@jridgewell/sourcemap-codec": "^1.4.14"
1531+ }
1532+ },
1533+ "node_modules/@napi-rs/wasm-runtime": {
1534+ "version": "1.2.2",
1535+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz",
1536+ "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==",
1537+ "dev": true,
1538+ "license": "MIT",
1539+ "optional": true,
1540+ "dependencies": {
1541+ "@tybys/wasm-util": "^0.10.3"
1542+ },
1543+ "engines": {
1544+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
1545+ },
1546+ "funding": {
1547+ "type": "github",
1548+ "url": "https://github.com/sponsors/Brooooooklyn"
1549+ },
1550+ "peerDependencies": {
1551+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3",
1552+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3"
1553+ }
1554+ },
1555+ "node_modules/@next/env": {
1556+ "version": "16.2.12",
1557+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.12.tgz",
1558+ "integrity": "sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==",
1559+ "license": "MIT"
1560+ },
1561+ "node_modules/@next/eslint-plugin-next": {
1562+ "version": "16.2.12",
1563+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.12.tgz",
1564+ "integrity": "sha512-uF2z/qAK2q7B5/6CpnFcBRX6jOq5iCO+Uqh1UkJhXljX1JwLarLYhhoJadO6dPb6moTprOKewMXheBcbIoSbug==",
1565+ "dev": true,
1566+ "license": "MIT",
1567+ "dependencies": {
1568+ "fast-glob": "3.3.1"
1569+ }
1570+ },
1571+ "node_modules/@next/swc-darwin-arm64": {
1572+ "version": "16.2.12",
1573+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.12.tgz",
1574+ "integrity": "sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==",
1575+ "cpu": [
1576+ "arm64"
1577+ ],
1578+ "license": "MIT",
1579+ "optional": true,
1580+ "os": [
1581+ "darwin"
1582+ ],
1583+ "engines": {
1584+ "node": ">= 10"
1585+ }
1586+ },
1587+ "node_modules/@next/swc-darwin-x64": {
1588+ "version": "16.2.12",
1589+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.12.tgz",
1590+ "integrity": "sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==",
1591+ "cpu": [
1592+ "x64"
1593+ ],
1594+ "license": "MIT",
1595+ "optional": true,
1596+ "os": [
1597+ "darwin"
1598+ ],
1599+ "engines": {
1600+ "node": ">= 10"
1601+ }
1602+ },
1603+ "node_modules/@next/swc-linux-arm64-gnu": {
1604+ "version": "16.2.12",
1605+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.12.tgz",
1606+ "integrity": "sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==",
1607+ "cpu": [
1608+ "arm64"
1609+ ],
1610+ "libc": [
1611+ "glibc"
1612+ ],
1613+ "license": "MIT",
1614+ "optional": true,
1615+ "os": [
1616+ "linux"
1617+ ],
1618+ "engines": {
1619+ "node": ">= 10"
1620+ }
1621+ },
1622+ "node_modules/@next/swc-linux-arm64-musl": {
1623+ "version": "16.2.12",
1624+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.12.tgz",
1625+ "integrity": "sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==",
1626+ "cpu": [
1627+ "arm64"
1628+ ],
1629+ "libc": [
1630+ "musl"
1631+ ],
1632+ "license": "MIT",
1633+ "optional": true,
1634+ "os": [
1635+ "linux"
1636+ ],
1637+ "engines": {
1638+ "node": ">= 10"
1639+ }
1640+ },
1641+ "node_modules/@next/swc-linux-x64-gnu": {
1642+ "version": "16.2.12",
1643+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.12.tgz",
1644+ "integrity": "sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==",
1645+ "cpu": [
1646+ "x64"
1647+ ],
1648+ "libc": [
1649+ "glibc"
1650+ ],
1651+ "license": "MIT",
1652+ "optional": true,
1653+ "os": [
1654+ "linux"
1655+ ],
1656+ "engines": {
1657+ "node": ">= 10"
1658+ }
1659+ },
1660+ "node_modules/@next/swc-linux-x64-musl": {
1661+ "version": "16.2.12",
1662+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.12.tgz",
1663+ "integrity": "sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==",
1664+ "cpu": [
1665+ "x64"
1666+ ],
1667+ "libc": [
1668+ "musl"
1669+ ],
1670+ "license": "MIT",
1671+ "optional": true,
1672+ "os": [
1673+ "linux"
1674+ ],
1675+ "engines": {
1676+ "node": ">= 10"
1677+ }
1678+ },
1679+ "node_modules/@next/swc-win32-arm64-msvc": {
1680+ "version": "16.2.12",
1681+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.12.tgz",
1682+ "integrity": "sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==",
1683+ "cpu": [
1684+ "arm64"
1685+ ],
1686+ "license": "MIT",
1687+ "optional": true,
1688+ "os": [
1689+ "win32"
1690+ ],
1691+ "engines": {
1692+ "node": ">= 10"
1693+ }
1694+ },
1695+ "node_modules/@next/swc-win32-x64-msvc": {
1696+ "version": "16.2.12",
1697+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.12.tgz",
1698+ "integrity": "sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==",
1699+ "cpu": [
1700+ "x64"
1701+ ],
1702+ "license": "MIT",
1703+ "optional": true,
1704+ "os": [
1705+ "win32"
1706+ ],
1707+ "engines": {
1708+ "node": ">= 10"
1709+ }
1710+ },
1711+ "node_modules/@nodelib/fs.scandir": {
1712+ "version": "2.1.5",
1713+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1714+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1715+ "dev": true,
1716+ "license": "MIT",
1717+ "dependencies": {
1718+ "@nodelib/fs.stat": "2.0.5",
1719+ "run-parallel": "^1.1.9"
1720+ },
1721+ "engines": {
1722+ "node": ">= 8"
1723+ }
1724+ },
1725+ "node_modules/@nodelib/fs.stat": {
1726+ "version": "2.0.5",
1727+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1728+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1729+ "dev": true,
1730+ "license": "MIT",
1731+ "engines": {
1732+ "node": ">= 8"
1733+ }
1734+ },
1735+ "node_modules/@nodelib/fs.walk": {
1736+ "version": "1.2.8",
1737+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1738+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1739+ "dev": true,
1740+ "license": "MIT",
1741+ "dependencies": {
1742+ "@nodelib/fs.scandir": "2.1.5",
1743+ "fastq": "^1.6.0"
1744+ },
1745+ "engines": {
1746+ "node": ">= 8"
1747+ }
1748+ },
1749+ "node_modules/@nolyfill/is-core-module": {
1750+ "version": "1.0.39",
1751+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
1752+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
1753+ "dev": true,
1754+ "license": "MIT",
1755+ "engines": {
1756+ "node": ">=12.4.0"
1757+ }
1758+ },
1759+ "node_modules/@rtsao/scc": {
1760+ "version": "1.1.0",
1761+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
1762+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
1763+ "dev": true,
1764+ "license": "MIT"
1765+ },
1766+ "node_modules/@swc/helpers": {
1767+ "version": "0.5.15",
1768+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
1769+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
1770+ "license": "Apache-2.0",
1771+ "dependencies": {
1772+ "tslib": "^2.8.0"
1773+ }
1774+ },
1775+ "node_modules/@tailwindcss/node": {
1776+ "version": "4.3.3",
1777+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz",
1778+ "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==",
1779+ "dev": true,
1780+ "license": "MIT",
1781+ "dependencies": {
1782+ "@jridgewell/remapping": "^2.3.5",
1783+ "enhanced-resolve": "^5.24.1",
1784+ "jiti": "^2.7.0",
1785+ "lightningcss": "1.32.0",
1786+ "magic-string": "^0.30.21",
1787+ "source-map-js": "^1.2.1",
1788+ "tailwindcss": "4.3.3"
1789+ }
1790+ },
1791+ "node_modules/@tailwindcss/oxide": {
1792+ "version": "4.3.3",
1793+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz",
1794+ "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==",
1795+ "dev": true,
1796+ "license": "MIT",
1797+ "engines": {
1798+ "node": ">= 20"
1799+ },
1800+ "optionalDependencies": {
1801+ "@tailwindcss/oxide-android-arm64": "4.3.3",
1802+ "@tailwindcss/oxide-darwin-arm64": "4.3.3",
1803+ "@tailwindcss/oxide-darwin-x64": "4.3.3",
1804+ "@tailwindcss/oxide-freebsd-x64": "4.3.3",
1805+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3",
1806+ "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3",
1807+ "@tailwindcss/oxide-linux-arm64-musl": "4.3.3",
1808+ "@tailwindcss/oxide-linux-x64-gnu": "4.3.3",
1809+ "@tailwindcss/oxide-linux-x64-musl": "4.3.3",
1810+ "@tailwindcss/oxide-wasm32-wasi": "4.3.3",
1811+ "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3",
1812+ "@tailwindcss/oxide-win32-x64-msvc": "4.3.3"
1813+ }
1814+ },
1815+ "node_modules/@tailwindcss/oxide-android-arm64": {
1816+ "version": "4.3.3",
1817+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz",
1818+ "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==",
1819+ "cpu": [
1820+ "arm64"
1821+ ],
1822+ "dev": true,
1823+ "license": "MIT",
1824+ "optional": true,
1825+ "os": [
1826+ "android"
1827+ ],
1828+ "engines": {
1829+ "node": ">= 20"
1830+ }
1831+ },
1832+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
1833+ "version": "4.3.3",
1834+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz",
1835+ "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==",
1836+ "cpu": [
1837+ "arm64"
1838+ ],
1839+ "dev": true,
1840+ "license": "MIT",
1841+ "optional": true,
1842+ "os": [
1843+ "darwin"
1844+ ],
1845+ "engines": {
1846+ "node": ">= 20"
1847+ }
1848+ },
1849+ "node_modules/@tailwindcss/oxide-darwin-x64": {
1850+ "version": "4.3.3",
1851+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz",
1852+ "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==",
1853+ "cpu": [
1854+ "x64"
1855+ ],
1856+ "dev": true,
1857+ "license": "MIT",
1858+ "optional": true,
1859+ "os": [
1860+ "darwin"
1861+ ],
1862+ "engines": {
1863+ "node": ">= 20"
1864+ }
1865+ },
1866+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
1867+ "version": "4.3.3",
1868+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz",
1869+ "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==",
1870+ "cpu": [
1871+ "x64"
1872+ ],
1873+ "dev": true,
1874+ "license": "MIT",
1875+ "optional": true,
1876+ "os": [
1877+ "freebsd"
1878+ ],
1879+ "engines": {
1880+ "node": ">= 20"
1881+ }
1882+ },
1883+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
1884+ "version": "4.3.3",
1885+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz",
1886+ "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==",
1887+ "cpu": [
1888+ "arm"
1889+ ],
1890+ "dev": true,
1891+ "license": "MIT",
1892+ "optional": true,
1893+ "os": [
1894+ "linux"
1895+ ],
1896+ "engines": {
1897+ "node": ">= 20"
1898+ }
1899+ },
1900+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
1901+ "version": "4.3.3",
1902+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz",
1903+ "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==",
1904+ "cpu": [
1905+ "arm64"
1906+ ],
1907+ "dev": true,
1908+ "libc": [
1909+ "glibc"
1910+ ],
1911+ "license": "MIT",
1912+ "optional": true,
1913+ "os": [
1914+ "linux"
1915+ ],
1916+ "engines": {
1917+ "node": ">= 20"
1918+ }
1919+ },
1920+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
1921+ "version": "4.3.3",
1922+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz",
1923+ "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==",
1924+ "cpu": [
1925+ "arm64"
1926+ ],
1927+ "dev": true,
1928+ "libc": [
1929+ "musl"
1930+ ],
1931+ "license": "MIT",
1932+ "optional": true,
1933+ "os": [
1934+ "linux"
1935+ ],
1936+ "engines": {
1937+ "node": ">= 20"
1938+ }
1939+ },
1940+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1941+ "version": "4.3.3",
1942+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz",
1943+ "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==",
1944+ "cpu": [
1945+ "x64"
1946+ ],
1947+ "dev": true,
1948+ "libc": [
1949+ "glibc"
1950+ ],
1951+ "license": "MIT",
1952+ "optional": true,
1953+ "os": [
1954+ "linux"
1955+ ],
1956+ "engines": {
1957+ "node": ">= 20"
1958+ }
1959+ },
1960+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
1961+ "version": "4.3.3",
1962+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz",
1963+ "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==",
1964+ "cpu": [
1965+ "x64"
1966+ ],
1967+ "dev": true,
1968+ "libc": [
1969+ "musl"
1970+ ],
1971+ "license": "MIT",
1972+ "optional": true,
1973+ "os": [
1974+ "linux"
1975+ ],
1976+ "engines": {
1977+ "node": ">= 20"
1978+ }
1979+ },
1980+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
1981+ "version": "4.3.3",
1982+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz",
1983+ "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==",
1984+ "bundleDependencies": [
1985+ "@napi-rs/wasm-runtime",
1986+ "@emnapi/core",
1987+ "@emnapi/runtime",
1988+ "@tybys/wasm-util",
1989+ "@emnapi/wasi-threads",
1990+ "tslib"
1991+ ],
1992+ "cpu": [
1993+ "wasm32"
1994+ ],
1995+ "dev": true,
1996+ "license": "MIT",
1997+ "optional": true,
1998+ "dependencies": {
1999+ "@emnapi/core": "^1.11.1",
2000+ "@emnapi/runtime": "^1.11.1",
2001+ "@emnapi/wasi-threads": "^1.2.2",
2002+ "@napi-rs/wasm-runtime": "^1.1.4",
2003+ "@tybys/wasm-util": "^0.10.2",
2004+ "tslib": "^2.8.1"
2005+ },
2006+ "engines": {
2007+ "node": ">=14.0.0"
2008+ }
2009+ },
2010+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
2011+ "version": "4.3.3",
2012+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
2013+ "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==",
2014+ "cpu": [
2015+ "arm64"
2016+ ],
2017+ "dev": true,
2018+ "license": "MIT",
2019+ "optional": true,
2020+ "os": [
2021+ "win32"
2022+ ],
2023+ "engines": {
2024+ "node": ">= 20"
2025+ }
2026+ },
2027+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
2028+ "version": "4.3.3",
2029+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz",
2030+ "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==",
2031+ "cpu": [
2032+ "x64"
2033+ ],
2034+ "dev": true,
2035+ "license": "MIT",
2036+ "optional": true,
2037+ "os": [
2038+ "win32"
2039+ ],
2040+ "engines": {
2041+ "node": ">= 20"
2042+ }
2043+ },
2044+ "node_modules/@tailwindcss/postcss": {
2045+ "version": "4.3.3",
2046+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz",
2047+ "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==",
2048+ "dev": true,
2049+ "license": "MIT",
2050+ "dependencies": {
2051+ "@alloc/quick-lru": "^5.2.0",
2052+ "@tailwindcss/node": "4.3.3",
2053+ "@tailwindcss/oxide": "4.3.3",
2054+ "postcss": "^8.5.16",
2055+ "tailwindcss": "4.3.3"
2056+ }
2057+ },
2058+ "node_modules/@tybys/wasm-util": {
2059+ "version": "0.10.3",
2060+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
2061+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
2062+ "dev": true,
2063+ "license": "MIT",
2064+ "optional": true,
2065+ "dependencies": {
2066+ "tslib": "^2.4.0"
2067+ }
2068+ },
2069+ "node_modules/@types/estree": {
2070+ "version": "1.0.9",
2071+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
2072+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
2073+ "dev": true,
2074+ "license": "MIT"
2075+ },
2076+ "node_modules/@types/json-schema": {
2077+ "version": "7.0.15",
2078+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
2079+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
2080+ "dev": true,
2081+ "license": "MIT"
2082+ },
2083+ "node_modules/@types/json5": {
2084+ "version": "0.0.29",
2085+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
2086+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
2087+ "dev": true,
2088+ "license": "MIT"
2089+ },
2090+ "node_modules/@types/node": {
2091+ "version": "22.20.1",
2092+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz",
2093+ "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==",
2094+ "dev": true,
2095+ "license": "MIT",
2096+ "dependencies": {
2097+ "undici-types": "~6.21.0"
2098+ }
2099+ },
2100+ "node_modules/@types/react": {
2101+ "version": "19.2.18",
2102+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz",
2103+ "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==",
2104+ "dev": true,
2105+ "license": "MIT",
2106+ "dependencies": {
2107+ "csstype": "^3.2.2"
2108+ }
2109+ },
2110+ "node_modules/@types/react-dom": {
2111+ "version": "19.2.4",
2112+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz",
2113+ "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==",
2114+ "dev": true,
2115+ "license": "MIT",
2116+ "peerDependencies": {
2117+ "@types/react": "^19.2.0"
2118+ }
2119+ },
2120+ "node_modules/@typescript-eslint/eslint-plugin": {
2121+ "version": "8.65.0",
2122+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz",
2123+ "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==",
2124+ "dev": true,
2125+ "license": "MIT",
2126+ "dependencies": {
2127+ "@eslint-community/regexpp": "^4.12.2",
2128+ "@typescript-eslint/scope-manager": "8.65.0",
2129+ "@typescript-eslint/type-utils": "8.65.0",
2130+ "@typescript-eslint/utils": "8.65.0",
2131+ "@typescript-eslint/visitor-keys": "8.65.0",
2132+ "ignore": "^7.0.5",
2133+ "natural-compare": "^1.4.0",
2134+ "ts-api-utils": "^2.5.0"
2135+ },
2136+ "engines": {
2137+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2138+ },
2139+ "funding": {
2140+ "type": "opencollective",
2141+ "url": "https://opencollective.com/typescript-eslint"
2142+ },
2143+ "peerDependencies": {
2144+ "@typescript-eslint/parser": "^8.65.0",
2145+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2146+ "typescript": ">=4.8.4 <6.1.0"
2147+ }
2148+ },
2149+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
2150+ "version": "7.0.6",
2151+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
2152+ "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
2153+ "dev": true,
2154+ "license": "MIT",
2155+ "engines": {
2156+ "node": ">= 4"
2157+ }
2158+ },
2159+ "node_modules/@typescript-eslint/parser": {
2160+ "version": "8.65.0",
2161+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz",
2162+ "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==",
2163+ "dev": true,
2164+ "license": "MIT",
2165+ "dependencies": {
2166+ "@typescript-eslint/scope-manager": "8.65.0",
2167+ "@typescript-eslint/types": "8.65.0",
2168+ "@typescript-eslint/typescript-estree": "8.65.0",
2169+ "@typescript-eslint/visitor-keys": "8.65.0",
2170+ "debug": "^4.4.3"
2171+ },
2172+ "engines": {
2173+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2174+ },
2175+ "funding": {
2176+ "type": "opencollective",
2177+ "url": "https://opencollective.com/typescript-eslint"
2178+ },
2179+ "peerDependencies": {
2180+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2181+ "typescript": ">=4.8.4 <6.1.0"
2182+ }
2183+ },
2184+ "node_modules/@typescript-eslint/project-service": {
2185+ "version": "8.65.0",
2186+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz",
2187+ "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==",
2188+ "dev": true,
2189+ "license": "MIT",
2190+ "dependencies": {
2191+ "@typescript-eslint/tsconfig-utils": "^8.65.0",
2192+ "@typescript-eslint/types": "^8.65.0",
2193+ "debug": "^4.4.3"
2194+ },
2195+ "engines": {
2196+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2197+ },
2198+ "funding": {
2199+ "type": "opencollective",
2200+ "url": "https://opencollective.com/typescript-eslint"
2201+ },
2202+ "peerDependencies": {
2203+ "typescript": ">=4.8.4 <6.1.0"
2204+ }
2205+ },
2206+ "node_modules/@typescript-eslint/scope-manager": {
2207+ "version": "8.65.0",
2208+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz",
2209+ "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==",
2210+ "dev": true,
2211+ "license": "MIT",
2212+ "dependencies": {
2213+ "@typescript-eslint/types": "8.65.0",
2214+ "@typescript-eslint/visitor-keys": "8.65.0"
2215+ },
2216+ "engines": {
2217+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2218+ },
2219+ "funding": {
2220+ "type": "opencollective",
2221+ "url": "https://opencollective.com/typescript-eslint"
2222+ }
2223+ },
2224+ "node_modules/@typescript-eslint/tsconfig-utils": {
2225+ "version": "8.65.0",
2226+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz",
2227+ "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==",
2228+ "dev": true,
2229+ "license": "MIT",
2230+ "engines": {
2231+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2232+ },
2233+ "funding": {
2234+ "type": "opencollective",
2235+ "url": "https://opencollective.com/typescript-eslint"
2236+ },
2237+ "peerDependencies": {
2238+ "typescript": ">=4.8.4 <6.1.0"
2239+ }
2240+ },
2241+ "node_modules/@typescript-eslint/type-utils": {
2242+ "version": "8.65.0",
2243+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz",
2244+ "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==",
2245+ "dev": true,
2246+ "license": "MIT",
2247+ "dependencies": {
2248+ "@typescript-eslint/types": "8.65.0",
2249+ "@typescript-eslint/typescript-estree": "8.65.0",
2250+ "@typescript-eslint/utils": "8.65.0",
2251+ "debug": "^4.4.3",
2252+ "ts-api-utils": "^2.5.0"
2253+ },
2254+ "engines": {
2255+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2256+ },
2257+ "funding": {
2258+ "type": "opencollective",
2259+ "url": "https://opencollective.com/typescript-eslint"
2260+ },
2261+ "peerDependencies": {
2262+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2263+ "typescript": ">=4.8.4 <6.1.0"
2264+ }
2265+ },
2266+ "node_modules/@typescript-eslint/types": {
2267+ "version": "8.65.0",
2268+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
2269+ "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
2270+ "dev": true,
2271+ "license": "MIT",
2272+ "engines": {
2273+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2274+ },
2275+ "funding": {
2276+ "type": "opencollective",
2277+ "url": "https://opencollective.com/typescript-eslint"
2278+ }
2279+ },
2280+ "node_modules/@typescript-eslint/typescript-estree": {
2281+ "version": "8.65.0",
2282+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz",
2283+ "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==",
2284+ "dev": true,
2285+ "license": "MIT",
2286+ "dependencies": {
2287+ "@typescript-eslint/project-service": "8.65.0",
2288+ "@typescript-eslint/tsconfig-utils": "8.65.0",
2289+ "@typescript-eslint/types": "8.65.0",
2290+ "@typescript-eslint/visitor-keys": "8.65.0",
2291+ "debug": "^4.4.3",
2292+ "minimatch": "^10.2.2",
2293+ "semver": "^7.7.3",
2294+ "tinyglobby": "^0.2.15",
2295+ "ts-api-utils": "^2.5.0"
2296+ },
2297+ "engines": {
2298+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2299+ },
2300+ "funding": {
2301+ "type": "opencollective",
2302+ "url": "https://opencollective.com/typescript-eslint"
2303+ },
2304+ "peerDependencies": {
2305+ "typescript": ">=4.8.4 <6.1.0"
2306+ }
2307+ },
2308+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
2309+ "version": "4.0.4",
2310+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
2311+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
2312+ "dev": true,
2313+ "license": "MIT",
2314+ "engines": {
2315+ "node": "18 || 20 || >=22"
2316+ }
2317+ },
2318+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
2319+ "version": "5.0.9",
2320+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
2321+ "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
2322+ "dev": true,
2323+ "license": "MIT",
2324+ "dependencies": {
2325+ "balanced-match": "^4.0.2"
2326+ },
2327+ "engines": {
2328+ "node": "20 || >=22"
2329+ }
2330+ },
2331+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
2332+ "version": "10.2.6",
2333+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
2334+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
2335+ "dev": true,
2336+ "license": "BlueOak-1.0.0",
2337+ "dependencies": {
2338+ "brace-expansion": "^5.0.8"
2339+ },
2340+ "engines": {
2341+ "node": "18 || 20 || >=22"
2342+ },
2343+ "funding": {
2344+ "url": "https://github.com/sponsors/isaacs"
2345+ }
2346+ },
2347+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
2348+ "version": "7.8.5",
2349+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
2350+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
2351+ "dev": true,
2352+ "license": "ISC",
2353+ "bin": {
2354+ "semver": "bin/semver.js"
2355+ },
2356+ "engines": {
2357+ "node": ">=10"
2358+ }
2359+ },
2360+ "node_modules/@typescript-eslint/utils": {
2361+ "version": "8.65.0",
2362+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz",
2363+ "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==",
2364+ "dev": true,
2365+ "license": "MIT",
2366+ "dependencies": {
2367+ "@eslint-community/eslint-utils": "^4.9.1",
2368+ "@typescript-eslint/scope-manager": "8.65.0",
2369+ "@typescript-eslint/types": "8.65.0",
2370+ "@typescript-eslint/typescript-estree": "8.65.0"
2371+ },
2372+ "engines": {
2373+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2374+ },
2375+ "funding": {
2376+ "type": "opencollective",
2377+ "url": "https://opencollective.com/typescript-eslint"
2378+ },
2379+ "peerDependencies": {
2380+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2381+ "typescript": ">=4.8.4 <6.1.0"
2382+ }
2383+ },
2384+ "node_modules/@typescript-eslint/visitor-keys": {
2385+ "version": "8.65.0",
2386+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz",
2387+ "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==",
2388+ "dev": true,
2389+ "license": "MIT",
2390+ "dependencies": {
2391+ "@typescript-eslint/types": "8.65.0",
2392+ "eslint-visitor-keys": "^5.0.0"
2393+ },
2394+ "engines": {
2395+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2396+ },
2397+ "funding": {
2398+ "type": "opencollective",
2399+ "url": "https://opencollective.com/typescript-eslint"
2400+ }
2401+ },
2402+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
2403+ "version": "5.0.1",
2404+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
2405+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
2406+ "dev": true,
2407+ "license": "Apache-2.0",
2408+ "engines": {
2409+ "node": "^20.19.0 || ^22.13.0 || >=24"
2410+ },
2411+ "funding": {
2412+ "url": "https://opencollective.com/eslint"
2413+ }
2414+ },
2415+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
2416+ "version": "1.12.2",
2417+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz",
2418+ "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==",
2419+ "cpu": [
2420+ "arm"
2421+ ],
2422+ "dev": true,
2423+ "license": "MIT",
2424+ "optional": true,
2425+ "os": [
2426+ "android"
2427+ ]
2428+ },
2429+ "node_modules/@unrs/resolver-binding-android-arm64": {
2430+ "version": "1.12.2",
2431+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz",
2432+ "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==",
2433+ "cpu": [
2434+ "arm64"
2435+ ],
2436+ "dev": true,
2437+ "license": "MIT",
2438+ "optional": true,
2439+ "os": [
2440+ "android"
2441+ ]
2442+ },
2443+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
2444+ "version": "1.12.2",
2445+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz",
2446+ "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==",
2447+ "cpu": [
2448+ "arm64"
2449+ ],
2450+ "dev": true,
2451+ "license": "MIT",
2452+ "optional": true,
2453+ "os": [
2454+ "darwin"
2455+ ]
2456+ },
2457+ "node_modules/@unrs/resolver-binding-darwin-x64": {
2458+ "version": "1.12.2",
2459+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz",
2460+ "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==",
2461+ "cpu": [
2462+ "x64"
2463+ ],
2464+ "dev": true,
2465+ "license": "MIT",
2466+ "optional": true,
2467+ "os": [
2468+ "darwin"
2469+ ]
2470+ },
2471+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
2472+ "version": "1.12.2",
2473+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz",
2474+ "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==",
2475+ "cpu": [
2476+ "x64"
2477+ ],
2478+ "dev": true,
2479+ "license": "MIT",
2480+ "optional": true,
2481+ "os": [
2482+ "freebsd"
2483+ ]
2484+ },
2485+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
2486+ "version": "1.12.2",
2487+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz",
2488+ "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==",
2489+ "cpu": [
2490+ "arm"
2491+ ],
2492+ "dev": true,
2493+ "license": "MIT",
2494+ "optional": true,
2495+ "os": [
2496+ "linux"
2497+ ]
2498+ },
2499+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
2500+ "version": "1.12.2",
2501+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz",
2502+ "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==",
2503+ "cpu": [
2504+ "arm"
2505+ ],
2506+ "dev": true,
2507+ "license": "MIT",
2508+ "optional": true,
2509+ "os": [
2510+ "linux"
2511+ ]
2512+ },
2513+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
2514+ "version": "1.12.2",
2515+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz",
2516+ "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==",
2517+ "cpu": [
2518+ "arm64"
2519+ ],
2520+ "dev": true,
2521+ "libc": [
2522+ "glibc"
2523+ ],
2524+ "license": "MIT",
2525+ "optional": true,
2526+ "os": [
2527+ "linux"
2528+ ]
2529+ },
2530+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
2531+ "version": "1.12.2",
2532+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz",
2533+ "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==",
2534+ "cpu": [
2535+ "arm64"
2536+ ],
2537+ "dev": true,
2538+ "libc": [
2539+ "musl"
2540+ ],
2541+ "license": "MIT",
2542+ "optional": true,
2543+ "os": [
2544+ "linux"
2545+ ]
2546+ },
2547+ "node_modules/@unrs/resolver-binding-linux-loong64-gnu": {
2548+ "version": "1.12.2",
2549+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz",
2550+ "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==",
2551+ "cpu": [
2552+ "loong64"
2553+ ],
2554+ "dev": true,
2555+ "libc": [
2556+ "glibc"
2557+ ],
2558+ "license": "MIT",
2559+ "optional": true,
2560+ "os": [
2561+ "linux"
2562+ ]
2563+ },
2564+ "node_modules/@unrs/resolver-binding-linux-loong64-musl": {
2565+ "version": "1.12.2",
2566+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz",
2567+ "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==",
2568+ "cpu": [
2569+ "loong64"
2570+ ],
2571+ "dev": true,
2572+ "libc": [
2573+ "musl"
2574+ ],
2575+ "license": "MIT",
2576+ "optional": true,
2577+ "os": [
2578+ "linux"
2579+ ]
2580+ },
2581+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
2582+ "version": "1.12.2",
2583+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz",
2584+ "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==",
2585+ "cpu": [
2586+ "ppc64"
2587+ ],
2588+ "dev": true,
2589+ "libc": [
2590+ "glibc"
2591+ ],
2592+ "license": "MIT",
2593+ "optional": true,
2594+ "os": [
2595+ "linux"
2596+ ]
2597+ },
2598+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
2599+ "version": "1.12.2",
2600+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz",
2601+ "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==",
2602+ "cpu": [
2603+ "riscv64"
2604+ ],
2605+ "dev": true,
2606+ "libc": [
2607+ "glibc"
2608+ ],
2609+ "license": "MIT",
2610+ "optional": true,
2611+ "os": [
2612+ "linux"
2613+ ]
2614+ },
2615+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
2616+ "version": "1.12.2",
2617+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz",
2618+ "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==",
2619+ "cpu": [
2620+ "riscv64"
2621+ ],
2622+ "dev": true,
2623+ "libc": [
2624+ "musl"
2625+ ],
2626+ "license": "MIT",
2627+ "optional": true,
2628+ "os": [
2629+ "linux"
2630+ ]
2631+ },
2632+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
2633+ "version": "1.12.2",
2634+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz",
2635+ "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==",
2636+ "cpu": [
2637+ "s390x"
2638+ ],
2639+ "dev": true,
2640+ "libc": [
2641+ "glibc"
2642+ ],
2643+ "license": "MIT",
2644+ "optional": true,
2645+ "os": [
2646+ "linux"
2647+ ]
2648+ },
2649+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
2650+ "version": "1.12.2",
2651+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz",
2652+ "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==",
2653+ "cpu": [
2654+ "x64"
2655+ ],
2656+ "dev": true,
2657+ "libc": [
2658+ "glibc"
2659+ ],
2660+ "license": "MIT",
2661+ "optional": true,
2662+ "os": [
2663+ "linux"
2664+ ]
2665+ },
2666+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
2667+ "version": "1.12.2",
2668+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz",
2669+ "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==",
2670+ "cpu": [
2671+ "x64"
2672+ ],
2673+ "dev": true,
2674+ "libc": [
2675+ "musl"
2676+ ],
2677+ "license": "MIT",
2678+ "optional": true,
2679+ "os": [
2680+ "linux"
2681+ ]
2682+ },
2683+ "node_modules/@unrs/resolver-binding-openharmony-arm64": {
2684+ "version": "1.12.2",
2685+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz",
2686+ "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==",
2687+ "cpu": [
2688+ "arm64"
2689+ ],
2690+ "dev": true,
2691+ "license": "MIT",
2692+ "optional": true,
2693+ "os": [
2694+ "openharmony"
2695+ ]
2696+ },
2697+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
2698+ "version": "1.12.2",
2699+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz",
2700+ "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==",
2701+ "cpu": [
2702+ "wasm32"
2703+ ],
2704+ "dev": true,
2705+ "license": "MIT",
2706+ "optional": true,
2707+ "dependencies": {
2708+ "@emnapi/core": "1.10.0",
2709+ "@emnapi/runtime": "1.10.0",
2710+ "@napi-rs/wasm-runtime": "^1.1.4"
2711+ },
2712+ "engines": {
2713+ "node": ">=14.0.0"
2714+ }
2715+ },
2716+ "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": {
2717+ "version": "1.10.0",
2718+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
2719+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
2720+ "dev": true,
2721+ "license": "MIT",
2722+ "optional": true,
2723+ "dependencies": {
2724+ "tslib": "^2.4.0"
2725+ }
2726+ },
2727+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
2728+ "version": "1.12.2",
2729+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz",
2730+ "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==",
2731+ "cpu": [
2732+ "arm64"
2733+ ],
2734+ "dev": true,
2735+ "license": "MIT",
2736+ "optional": true,
2737+ "os": [
2738+ "win32"
2739+ ]
2740+ },
2741+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
2742+ "version": "1.12.2",
2743+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz",
2744+ "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==",
2745+ "cpu": [
2746+ "ia32"
2747+ ],
2748+ "dev": true,
2749+ "license": "MIT",
2750+ "optional": true,
2751+ "os": [
2752+ "win32"
2753+ ]
2754+ },
2755+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
2756+ "version": "1.12.2",
2757+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz",
2758+ "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==",
2759+ "cpu": [
2760+ "x64"
2761+ ],
2762+ "dev": true,
2763+ "license": "MIT",
2764+ "optional": true,
2765+ "os": [
2766+ "win32"
2767+ ]
2768+ },
2769+ "node_modules/acorn": {
2770+ "version": "8.18.0",
2771+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
2772+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
2773+ "dev": true,
2774+ "license": "MIT",
2775+ "bin": {
2776+ "acorn": "bin/acorn"
2777+ },
2778+ "engines": {
2779+ "node": ">=0.4.0"
2780+ }
2781+ },
2782+ "node_modules/acorn-jsx": {
2783+ "version": "5.3.2",
2784+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
2785+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
2786+ "dev": true,
2787+ "license": "MIT",
2788+ "peerDependencies": {
2789+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
2790+ }
2791+ },
2792+ "node_modules/ajv": {
2793+ "version": "6.15.0",
2794+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
2795+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
2796+ "dev": true,
2797+ "license": "MIT",
2798+ "dependencies": {
2799+ "fast-deep-equal": "^3.1.1",
2800+ "fast-json-stable-stringify": "^2.0.0",
2801+ "json-schema-traverse": "^0.4.1",
2802+ "uri-js": "^4.2.2"
2803+ },
2804+ "funding": {
2805+ "type": "github",
2806+ "url": "https://github.com/sponsors/epoberezkin"
2807+ }
2808+ },
2809+ "node_modules/ansi-styles": {
2810+ "version": "4.3.0",
2811+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2812+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2813+ "dev": true,
2814+ "license": "MIT",
2815+ "dependencies": {
2816+ "color-convert": "^2.0.1"
2817+ },
2818+ "engines": {
2819+ "node": ">=8"
2820+ },
2821+ "funding": {
2822+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2823+ }
2824+ },
2825+ "node_modules/argparse": {
2826+ "version": "2.0.1",
2827+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2828+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2829+ "dev": true,
2830+ "license": "Python-2.0"
2831+ },
2832+ "node_modules/aria-query": {
2833+ "version": "5.3.2",
2834+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
2835+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
2836+ "dev": true,
2837+ "license": "Apache-2.0",
2838+ "engines": {
2839+ "node": ">= 0.4"
2840+ }
2841+ },
2842+ "node_modules/array-buffer-byte-length": {
2843+ "version": "1.0.2",
2844+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
2845+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
2846+ "dev": true,
2847+ "license": "MIT",
2848+ "dependencies": {
2849+ "call-bound": "^1.0.3",
2850+ "is-array-buffer": "^3.0.5"
2851+ },
2852+ "engines": {
2853+ "node": ">= 0.4"
2854+ },
2855+ "funding": {
2856+ "url": "https://github.com/sponsors/ljharb"
2857+ }
2858+ },
2859+ "node_modules/array-includes": {
2860+ "version": "3.1.9",
2861+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
2862+ "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
2863+ "dev": true,
2864+ "license": "MIT",
2865+ "dependencies": {
2866+ "call-bind": "^1.0.8",
2867+ "call-bound": "^1.0.4",
2868+ "define-properties": "^1.2.1",
2869+ "es-abstract": "^1.24.0",
2870+ "es-object-atoms": "^1.1.1",
2871+ "get-intrinsic": "^1.3.0",
2872+ "is-string": "^1.1.1",
2873+ "math-intrinsics": "^1.1.0"
2874+ },
2875+ "engines": {
2876+ "node": ">= 0.4"
2877+ },
2878+ "funding": {
2879+ "url": "https://github.com/sponsors/ljharb"
2880+ }
2881+ },
2882+ "node_modules/array.prototype.findlast": {
2883+ "version": "1.2.5",
2884+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
2885+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
2886+ "dev": true,
2887+ "license": "MIT",
2888+ "dependencies": {
2889+ "call-bind": "^1.0.7",
2890+ "define-properties": "^1.2.1",
2891+ "es-abstract": "^1.23.2",
2892+ "es-errors": "^1.3.0",
2893+ "es-object-atoms": "^1.0.0",
2894+ "es-shim-unscopables": "^1.0.2"
2895+ },
2896+ "engines": {
2897+ "node": ">= 0.4"
2898+ },
2899+ "funding": {
2900+ "url": "https://github.com/sponsors/ljharb"
2901+ }
2902+ },
2903+ "node_modules/array.prototype.findlastindex": {
2904+ "version": "1.2.6",
2905+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
2906+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
2907+ "dev": true,
2908+ "license": "MIT",
2909+ "dependencies": {
2910+ "call-bind": "^1.0.8",
2911+ "call-bound": "^1.0.4",
2912+ "define-properties": "^1.2.1",
2913+ "es-abstract": "^1.23.9",
2914+ "es-errors": "^1.3.0",
2915+ "es-object-atoms": "^1.1.1",
2916+ "es-shim-unscopables": "^1.1.0"
2917+ },
2918+ "engines": {
2919+ "node": ">= 0.4"
2920+ },
2921+ "funding": {
2922+ "url": "https://github.com/sponsors/ljharb"
2923+ }
2924+ },
2925+ "node_modules/array.prototype.flat": {
2926+ "version": "1.3.3",
2927+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
2928+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
2929+ "dev": true,
2930+ "license": "MIT",
2931+ "dependencies": {
2932+ "call-bind": "^1.0.8",
2933+ "define-properties": "^1.2.1",
2934+ "es-abstract": "^1.23.5",
2935+ "es-shim-unscopables": "^1.0.2"
2936+ },
2937+ "engines": {
2938+ "node": ">= 0.4"
2939+ },
2940+ "funding": {
2941+ "url": "https://github.com/sponsors/ljharb"
2942+ }
2943+ },
2944+ "node_modules/array.prototype.flatmap": {
2945+ "version": "1.3.3",
2946+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
2947+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
2948+ "dev": true,
2949+ "license": "MIT",
2950+ "dependencies": {
2951+ "call-bind": "^1.0.8",
2952+ "define-properties": "^1.2.1",
2953+ "es-abstract": "^1.23.5",
2954+ "es-shim-unscopables": "^1.0.2"
2955+ },
2956+ "engines": {
2957+ "node": ">= 0.4"
2958+ },
2959+ "funding": {
2960+ "url": "https://github.com/sponsors/ljharb"
2961+ }
2962+ },
2963+ "node_modules/array.prototype.tosorted": {
2964+ "version": "1.1.4",
2965+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
2966+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
2967+ "dev": true,
2968+ "license": "MIT",
2969+ "dependencies": {
2970+ "call-bind": "^1.0.7",
2971+ "define-properties": "^1.2.1",
2972+ "es-abstract": "^1.23.3",
2973+ "es-errors": "^1.3.0",
2974+ "es-shim-unscopables": "^1.0.2"
2975+ },
2976+ "engines": {
2977+ "node": ">= 0.4"
2978+ }
2979+ },
2980+ "node_modules/arraybuffer.prototype.slice": {
2981+ "version": "1.0.4",
2982+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
2983+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
2984+ "dev": true,
2985+ "license": "MIT",
2986+ "dependencies": {
2987+ "array-buffer-byte-length": "^1.0.1",
2988+ "call-bind": "^1.0.8",
2989+ "define-properties": "^1.2.1",
2990+ "es-abstract": "^1.23.5",
2991+ "es-errors": "^1.3.0",
2992+ "get-intrinsic": "^1.2.6",
2993+ "is-array-buffer": "^3.0.4"
2994+ },
2995+ "engines": {
2996+ "node": ">= 0.4"
2997+ },
2998+ "funding": {
2999+ "url": "https://github.com/sponsors/ljharb"
3000+ }
3001+ },
3002+ "node_modules/ast-types-flow": {
3003+ "version": "0.0.8",
3004+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
3005+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
3006+ "dev": true,
3007+ "license": "MIT"
3008+ },
3009+ "node_modules/async-function": {
3010+ "version": "1.0.0",
3011+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
3012+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
3013+ "dev": true,
3014+ "license": "MIT",
3015+ "engines": {
3016+ "node": ">= 0.4"
3017+ }
3018+ },
3019+ "node_modules/available-typed-arrays": {
3020+ "version": "1.0.7",
3021+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
3022+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
3023+ "dev": true,
3024+ "license": "MIT",
3025+ "dependencies": {
3026+ "possible-typed-array-names": "^1.0.0"
3027+ },
3028+ "engines": {
3029+ "node": ">= 0.4"
3030+ },
3031+ "funding": {
3032+ "url": "https://github.com/sponsors/ljharb"
3033+ }
3034+ },
3035+ "node_modules/axe-core": {
3036+ "version": "4.12.1",
3037+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz",
3038+ "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==",
3039+ "dev": true,
3040+ "license": "MPL-2.0",
3041+ "engines": {
3042+ "node": ">=4"
3043+ }
3044+ },
3045+ "node_modules/axobject-query": {
3046+ "version": "4.1.0",
3047+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
3048+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
3049+ "dev": true,
3050+ "license": "Apache-2.0",
3051+ "engines": {
3052+ "node": ">= 0.4"
3053+ }
3054+ },
3055+ "node_modules/balanced-match": {
3056+ "version": "1.0.2",
3057+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
3058+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
3059+ "dev": true,
3060+ "license": "MIT"
3061+ },
3062+ "node_modules/baseline-browser-mapping": {
3063+ "version": "2.11.12",
3064+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz",
3065+ "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==",
3066+ "license": "Apache-2.0",
3067+ "bin": {
3068+ "baseline-browser-mapping": "dist/cli.cjs"
3069+ },
3070+ "engines": {
3071+ "node": ">=6.0.0"
3072+ }
3073+ },
3074+ "node_modules/brace-expansion": {
3075+ "version": "1.1.18",
3076+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
3077+ "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
3078+ "dev": true,
3079+ "license": "MIT",
3080+ "dependencies": {
3081+ "balanced-match": "^1.0.0",
3082+ "concat-map": "0.0.1"
3083+ }
3084+ },
3085+ "node_modules/braces": {
3086+ "version": "3.0.3",
3087+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
3088+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
3089+ "dev": true,
3090+ "license": "MIT",
3091+ "dependencies": {
3092+ "fill-range": "^7.1.1"
3093+ },
3094+ "engines": {
3095+ "node": ">=8"
3096+ }
3097+ },
3098+ "node_modules/browserslist": {
3099+ "version": "4.28.7",
3100+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz",
3101+ "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==",
3102+ "dev": true,
3103+ "funding": [
3104+ {
3105+ "type": "opencollective",
3106+ "url": "https://opencollective.com/browserslist"
3107+ },
3108+ {
3109+ "type": "tidelift",
3110+ "url": "https://tidelift.com/funding/github/npm/browserslist"
3111+ },
3112+ {
3113+ "type": "github",
3114+ "url": "https://github.com/sponsors/ai"
3115+ }
3116+ ],
3117+ "license": "MIT",
3118+ "dependencies": {
3119+ "baseline-browser-mapping": "^2.10.44",
3120+ "caniuse-lite": "^1.0.30001806",
3121+ "electron-to-chromium": "^1.5.393",
3122+ "node-releases": "^2.0.51",
3123+ "update-browserslist-db": "^1.2.3"
3124+ },
3125+ "bin": {
3126+ "browserslist": "cli.js"
3127+ },
3128+ "engines": {
3129+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
3130+ }
3131+ },
3132+ "node_modules/call-bind": {
3133+ "version": "1.0.9",
3134+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
3135+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
3136+ "dev": true,
3137+ "license": "MIT",
3138+ "dependencies": {
3139+ "call-bind-apply-helpers": "^1.0.2",
3140+ "es-define-property": "^1.0.1",
3141+ "get-intrinsic": "^1.3.0",
3142+ "set-function-length": "^1.2.2"
3143+ },
3144+ "engines": {
3145+ "node": ">= 0.4"
3146+ },
3147+ "funding": {
3148+ "url": "https://github.com/sponsors/ljharb"
3149+ }
3150+ },
3151+ "node_modules/call-bind-apply-helpers": {
3152+ "version": "1.0.2",
3153+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
3154+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
3155+ "dev": true,
3156+ "license": "MIT",
3157+ "dependencies": {
3158+ "es-errors": "^1.3.0",
3159+ "function-bind": "^1.1.2"
3160+ },
3161+ "engines": {
3162+ "node": ">= 0.4"
3163+ }
3164+ },
3165+ "node_modules/call-bound": {
3166+ "version": "1.0.4",
3167+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
3168+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
3169+ "dev": true,
3170+ "license": "MIT",
3171+ "dependencies": {
3172+ "call-bind-apply-helpers": "^1.0.2",
3173+ "get-intrinsic": "^1.3.0"
3174+ },
3175+ "engines": {
3176+ "node": ">= 0.4"
3177+ },
3178+ "funding": {
3179+ "url": "https://github.com/sponsors/ljharb"
3180+ }
3181+ },
3182+ "node_modules/callsites": {
3183+ "version": "3.1.0",
3184+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
3185+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
3186+ "dev": true,
3187+ "license": "MIT",
3188+ "engines": {
3189+ "node": ">=6"
3190+ }
3191+ },
3192+ "node_modules/caniuse-lite": {
3193+ "version": "1.0.30001806",
3194+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz",
3195+ "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==",
3196+ "funding": [
3197+ {
3198+ "type": "opencollective",
3199+ "url": "https://opencollective.com/browserslist"
3200+ },
3201+ {
3202+ "type": "tidelift",
3203+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
3204+ },
3205+ {
3206+ "type": "github",
3207+ "url": "https://github.com/sponsors/ai"
3208+ }
3209+ ],
3210+ "license": "CC-BY-4.0"
3211+ },
3212+ "node_modules/chalk": {
3213+ "version": "4.1.2",
3214+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
3215+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
3216+ "dev": true,
3217+ "license": "MIT",
3218+ "dependencies": {
3219+ "ansi-styles": "^4.1.0",
3220+ "supports-color": "^7.1.0"
3221+ },
3222+ "engines": {
3223+ "node": ">=10"
3224+ },
3225+ "funding": {
3226+ "url": "https://github.com/chalk/chalk?sponsor=1"
3227+ }
3228+ },
3229+ "node_modules/client-only": {
3230+ "version": "0.0.1",
3231+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
3232+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
3233+ "license": "MIT"
3234+ },
3235+ "node_modules/color-convert": {
3236+ "version": "2.0.1",
3237+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
3238+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
3239+ "dev": true,
3240+ "license": "MIT",
3241+ "dependencies": {
3242+ "color-name": "~1.1.4"
3243+ },
3244+ "engines": {
3245+ "node": ">=7.0.0"
3246+ }
3247+ },
3248+ "node_modules/color-name": {
3249+ "version": "1.1.4",
3250+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3251+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
3252+ "dev": true,
3253+ "license": "MIT"
3254+ },
3255+ "node_modules/concat-map": {
3256+ "version": "0.0.1",
3257+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3258+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
3259+ "dev": true,
3260+ "license": "MIT"
3261+ },
3262+ "node_modules/convert-source-map": {
3263+ "version": "2.0.0",
3264+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
3265+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
3266+ "dev": true,
3267+ "license": "MIT"
3268+ },
3269+ "node_modules/cross-spawn": {
3270+ "version": "7.0.6",
3271+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
3272+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
3273+ "dev": true,
3274+ "license": "MIT",
3275+ "dependencies": {
3276+ "path-key": "^3.1.0",
3277+ "shebang-command": "^2.0.0",
3278+ "which": "^2.0.1"
3279+ },
3280+ "engines": {
3281+ "node": ">= 8"
3282+ }
3283+ },
3284+ "node_modules/csstype": {
3285+ "version": "3.2.3",
3286+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
3287+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
3288+ "dev": true,
3289+ "license": "MIT"
3290+ },
3291+ "node_modules/damerau-levenshtein": {
3292+ "version": "1.0.8",
3293+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
3294+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
3295+ "dev": true,
3296+ "license": "BSD-2-Clause"
3297+ },
3298+ "node_modules/data-view-buffer": {
3299+ "version": "1.0.2",
3300+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
3301+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
3302+ "dev": true,
3303+ "license": "MIT",
3304+ "dependencies": {
3305+ "call-bound": "^1.0.3",
3306+ "es-errors": "^1.3.0",
3307+ "is-data-view": "^1.0.2"
3308+ },
3309+ "engines": {
3310+ "node": ">= 0.4"
3311+ },
3312+ "funding": {
3313+ "url": "https://github.com/sponsors/ljharb"
3314+ }
3315+ },
3316+ "node_modules/data-view-byte-length": {
3317+ "version": "1.0.2",
3318+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
3319+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
3320+ "dev": true,
3321+ "license": "MIT",
3322+ "dependencies": {
3323+ "call-bound": "^1.0.3",
3324+ "es-errors": "^1.3.0",
3325+ "is-data-view": "^1.0.2"
3326+ },
3327+ "engines": {
3328+ "node": ">= 0.4"
3329+ },
3330+ "funding": {
3331+ "url": "https://github.com/sponsors/inspect-js"
3332+ }
3333+ },
3334+ "node_modules/data-view-byte-offset": {
3335+ "version": "1.0.1",
3336+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
3337+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
3338+ "dev": true,
3339+ "license": "MIT",
3340+ "dependencies": {
3341+ "call-bound": "^1.0.2",
3342+ "es-errors": "^1.3.0",
3343+ "is-data-view": "^1.0.1"
3344+ },
3345+ "engines": {
3346+ "node": ">= 0.4"
3347+ },
3348+ "funding": {
3349+ "url": "https://github.com/sponsors/ljharb"
3350+ }
3351+ },
3352+ "node_modules/debug": {
3353+ "version": "4.4.3",
3354+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
3355+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
3356+ "dev": true,
3357+ "license": "MIT",
3358+ "dependencies": {
3359+ "ms": "^2.1.3"
3360+ },
3361+ "engines": {
3362+ "node": ">=6.0"
3363+ },
3364+ "peerDependenciesMeta": {
3365+ "supports-color": {
3366+ "optional": true
3367+ }
3368+ }
3369+ },
3370+ "node_modules/deep-is": {
3371+ "version": "0.1.4",
3372+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
3373+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
3374+ "dev": true,
3375+ "license": "MIT"
3376+ },
3377+ "node_modules/define-data-property": {
3378+ "version": "1.1.4",
3379+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
3380+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
3381+ "dev": true,
3382+ "license": "MIT",
3383+ "dependencies": {
3384+ "es-define-property": "^1.0.0",
3385+ "es-errors": "^1.3.0",
3386+ "gopd": "^1.0.1"
3387+ },
3388+ "engines": {
3389+ "node": ">= 0.4"
3390+ },
3391+ "funding": {
3392+ "url": "https://github.com/sponsors/ljharb"
3393+ }
3394+ },
3395+ "node_modules/define-properties": {
3396+ "version": "1.2.1",
3397+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
3398+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
3399+ "dev": true,
3400+ "license": "MIT",
3401+ "dependencies": {
3402+ "define-data-property": "^1.0.1",
3403+ "has-property-descriptors": "^1.0.0",
3404+ "object-keys": "^1.1.1"
3405+ },
3406+ "engines": {
3407+ "node": ">= 0.4"
3408+ },
3409+ "funding": {
3410+ "url": "https://github.com/sponsors/ljharb"
3411+ }
3412+ },
3413+ "node_modules/detect-libc": {
3414+ "version": "2.1.2",
3415+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
3416+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
3417+ "devOptional": true,
3418+ "license": "Apache-2.0",
3419+ "engines": {
3420+ "node": ">=8"
3421+ }
3422+ },
3423+ "node_modules/doctrine": {
3424+ "version": "2.1.0",
3425+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
3426+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
3427+ "dev": true,
3428+ "license": "Apache-2.0",
3429+ "dependencies": {
3430+ "esutils": "^2.0.2"
3431+ },
3432+ "engines": {
3433+ "node": ">=0.10.0"
3434+ }
3435+ },
3436+ "node_modules/dunder-proto": {
3437+ "version": "1.0.1",
3438+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
3439+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
3440+ "dev": true,
3441+ "license": "MIT",
3442+ "dependencies": {
3443+ "call-bind-apply-helpers": "^1.0.1",
3444+ "es-errors": "^1.3.0",
3445+ "gopd": "^1.2.0"
3446+ },
3447+ "engines": {
3448+ "node": ">= 0.4"
3449+ }
3450+ },
3451+ "node_modules/electron-to-chromium": {
3452+ "version": "1.5.399",
3453+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.399.tgz",
3454+ "integrity": "sha512-lEcqhErbHjXRvd41rnWLpzbyU/IXfIYo7QwaFWmxGeLiLyY2TBCdHnWY88vB+p3ubnihRypDm66panXl7TylLA==",
3455+ "dev": true,
3456+ "license": "ISC"
3457+ },
3458+ "node_modules/emoji-regex": {
3459+ "version": "9.2.2",
3460+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
3461+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
3462+ "dev": true,
3463+ "license": "MIT"
3464+ },
3465+ "node_modules/enhanced-resolve": {
3466+ "version": "5.24.5",
3467+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz",
3468+ "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==",
3469+ "dev": true,
3470+ "license": "MIT",
3471+ "dependencies": {
3472+ "graceful-fs": "^4.2.4",
3473+ "tapable": "^2.3.3"
3474+ },
3475+ "engines": {
3476+ "node": ">=10.13.0"
3477+ }
3478+ },
3479+ "node_modules/es-abstract": {
3480+ "version": "1.24.2",
3481+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
3482+ "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
3483+ "dev": true,
3484+ "license": "MIT",
3485+ "dependencies": {
3486+ "array-buffer-byte-length": "^1.0.2",
3487+ "arraybuffer.prototype.slice": "^1.0.4",
3488+ "available-typed-arrays": "^1.0.7",
3489+ "call-bind": "^1.0.8",
3490+ "call-bound": "^1.0.4",
3491+ "data-view-buffer": "^1.0.2",
3492+ "data-view-byte-length": "^1.0.2",
3493+ "data-view-byte-offset": "^1.0.1",
3494+ "es-define-property": "^1.0.1",
3495+ "es-errors": "^1.3.0",
3496+ "es-object-atoms": "^1.1.1",
3497+ "es-set-tostringtag": "^2.1.0",
3498+ "es-to-primitive": "^1.3.0",
3499+ "function.prototype.name": "^1.1.8",
3500+ "get-intrinsic": "^1.3.0",
3501+ "get-proto": "^1.0.1",
3502+ "get-symbol-description": "^1.1.0",
3503+ "globalthis": "^1.0.4",
3504+ "gopd": "^1.2.0",
3505+ "has-property-descriptors": "^1.0.2",
3506+ "has-proto": "^1.2.0",
3507+ "has-symbols": "^1.1.0",
3508+ "hasown": "^2.0.2",
3509+ "internal-slot": "^1.1.0",
3510+ "is-array-buffer": "^3.0.5",
3511+ "is-callable": "^1.2.7",
3512+ "is-data-view": "^1.0.2",
3513+ "is-negative-zero": "^2.0.3",
3514+ "is-regex": "^1.2.1",
3515+ "is-set": "^2.0.3",
3516+ "is-shared-array-buffer": "^1.0.4",
3517+ "is-string": "^1.1.1",
3518+ "is-typed-array": "^1.1.15",
3519+ "is-weakref": "^1.1.1",
3520+ "math-intrinsics": "^1.1.0",
3521+ "object-inspect": "^1.13.4",
3522+ "object-keys": "^1.1.1",
3523+ "object.assign": "^4.1.7",
3524+ "own-keys": "^1.0.1",
3525+ "regexp.prototype.flags": "^1.5.4",
3526+ "safe-array-concat": "^1.1.3",
3527+ "safe-push-apply": "^1.0.0",
3528+ "safe-regex-test": "^1.1.0",
3529+ "set-proto": "^1.0.0",
3530+ "stop-iteration-iterator": "^1.1.0",
3531+ "string.prototype.trim": "^1.2.10",
3532+ "string.prototype.trimend": "^1.0.9",
3533+ "string.prototype.trimstart": "^1.0.8",
3534+ "typed-array-buffer": "^1.0.3",
3535+ "typed-array-byte-length": "^1.0.3",
3536+ "typed-array-byte-offset": "^1.0.4",
3537+ "typed-array-length": "^1.0.7",
3538+ "unbox-primitive": "^1.1.0",
3539+ "which-typed-array": "^1.1.19"
3540+ },
3541+ "engines": {
3542+ "node": ">= 0.4"
3543+ },
3544+ "funding": {
3545+ "url": "https://github.com/sponsors/ljharb"
3546+ }
3547+ },
3548+ "node_modules/es-abstract-get": {
3549+ "version": "1.0.0",
3550+ "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz",
3551+ "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==",
3552+ "dev": true,
3553+ "license": "MIT",
3554+ "dependencies": {
3555+ "es-errors": "^1.3.0",
3556+ "es-object-atoms": "^1.1.2",
3557+ "is-callable": "^1.2.7",
3558+ "object-inspect": "^1.13.4"
3559+ },
3560+ "engines": {
3561+ "node": ">= 0.4"
3562+ },
3563+ "funding": {
3564+ "url": "https://github.com/sponsors/ljharb"
3565+ }
3566+ },
3567+ "node_modules/es-define-property": {
3568+ "version": "1.0.1",
3569+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
3570+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
3571+ "dev": true,
3572+ "license": "MIT",
3573+ "engines": {
3574+ "node": ">= 0.4"
3575+ }
3576+ },
3577+ "node_modules/es-errors": {
3578+ "version": "1.3.0",
3579+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
3580+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
3581+ "dev": true,
3582+ "license": "MIT",
3583+ "engines": {
3584+ "node": ">= 0.4"
3585+ }
3586+ },
3587+ "node_modules/es-iterator-helpers": {
3588+ "version": "1.4.0",
3589+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz",
3590+ "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==",
3591+ "dev": true,
3592+ "license": "MIT",
3593+ "dependencies": {
3594+ "call-bind": "^1.0.9",
3595+ "call-bound": "^1.0.4",
3596+ "define-properties": "^1.2.1",
3597+ "es-abstract": "^1.24.2",
3598+ "es-errors": "^1.3.0",
3599+ "es-set-tostringtag": "^2.1.0",
3600+ "function-bind": "^1.1.2",
3601+ "get-intrinsic": "^1.3.0",
3602+ "globalthis": "^1.0.4",
3603+ "gopd": "^1.2.0",
3604+ "has-property-descriptors": "^1.0.2",
3605+ "has-proto": "^1.2.0",
3606+ "has-symbols": "^1.1.0",
3607+ "internal-slot": "^1.1.0",
3608+ "iterator.prototype": "^1.1.5",
3609+ "math-intrinsics": "^1.1.0"
3610+ },
3611+ "engines": {
3612+ "node": ">= 0.4"
3613+ }
3614+ },
3615+ "node_modules/es-object-atoms": {
3616+ "version": "1.1.2",
3617+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
3618+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
3619+ "dev": true,
3620+ "license": "MIT",
3621+ "dependencies": {
3622+ "es-errors": "^1.3.0"
3623+ },
3624+ "engines": {
3625+ "node": ">= 0.4"
3626+ }
3627+ },
3628+ "node_modules/es-set-tostringtag": {
3629+ "version": "2.1.0",
3630+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
3631+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
3632+ "dev": true,
3633+ "license": "MIT",
3634+ "dependencies": {
3635+ "es-errors": "^1.3.0",
3636+ "get-intrinsic": "^1.2.6",
3637+ "has-tostringtag": "^1.0.2",
3638+ "hasown": "^2.0.2"
3639+ },
3640+ "engines": {
3641+ "node": ">= 0.4"
3642+ }
3643+ },
3644+ "node_modules/es-shim-unscopables": {
3645+ "version": "1.1.0",
3646+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
3647+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
3648+ "dev": true,
3649+ "license": "MIT",
3650+ "dependencies": {
3651+ "hasown": "^2.0.2"
3652+ },
3653+ "engines": {
3654+ "node": ">= 0.4"
3655+ }
3656+ },
3657+ "node_modules/es-to-primitive": {
3658+ "version": "1.3.4",
3659+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz",
3660+ "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==",
3661+ "dev": true,
3662+ "license": "MIT",
3663+ "dependencies": {
3664+ "es-abstract-get": "^1.0.0",
3665+ "es-define-property": "^1.0.1",
3666+ "es-errors": "^1.3.0",
3667+ "is-callable": "^1.2.7",
3668+ "is-date-object": "^1.1.0",
3669+ "is-symbol": "^1.1.1"
3670+ },
3671+ "engines": {
3672+ "node": ">= 0.4"
3673+ },
3674+ "funding": {
3675+ "url": "https://github.com/sponsors/ljharb"
3676+ }
3677+ },
3678+ "node_modules/esbuild": {
3679+ "version": "0.28.1",
3680+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
3681+ "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
3682+ "dev": true,
3683+ "hasInstallScript": true,
3684+ "license": "MIT",
3685+ "bin": {
3686+ "esbuild": "bin/esbuild"
3687+ },
3688+ "engines": {
3689+ "node": ">=18"
3690+ },
3691+ "optionalDependencies": {
3692+ "@esbuild/aix-ppc64": "0.28.1",
3693+ "@esbuild/android-arm": "0.28.1",
3694+ "@esbuild/android-arm64": "0.28.1",
3695+ "@esbuild/android-x64": "0.28.1",
3696+ "@esbuild/darwin-arm64": "0.28.1",
3697+ "@esbuild/darwin-x64": "0.28.1",
3698+ "@esbuild/freebsd-arm64": "0.28.1",
3699+ "@esbuild/freebsd-x64": "0.28.1",
3700+ "@esbuild/linux-arm": "0.28.1",
3701+ "@esbuild/linux-arm64": "0.28.1",
3702+ "@esbuild/linux-ia32": "0.28.1",
3703+ "@esbuild/linux-loong64": "0.28.1",
3704+ "@esbuild/linux-mips64el": "0.28.1",
3705+ "@esbuild/linux-ppc64": "0.28.1",
3706+ "@esbuild/linux-riscv64": "0.28.1",
3707+ "@esbuild/linux-s390x": "0.28.1",
3708+ "@esbuild/linux-x64": "0.28.1",
3709+ "@esbuild/netbsd-arm64": "0.28.1",
3710+ "@esbuild/netbsd-x64": "0.28.1",
3711+ "@esbuild/openbsd-arm64": "0.28.1",
3712+ "@esbuild/openbsd-x64": "0.28.1",
3713+ "@esbuild/openharmony-arm64": "0.28.1",
3714+ "@esbuild/sunos-x64": "0.28.1",
3715+ "@esbuild/win32-arm64": "0.28.1",
3716+ "@esbuild/win32-ia32": "0.28.1",
3717+ "@esbuild/win32-x64": "0.28.1"
3718+ }
3719+ },
3720+ "node_modules/escalade": {
3721+ "version": "3.2.0",
3722+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
3723+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
3724+ "dev": true,
3725+ "license": "MIT",
3726+ "engines": {
3727+ "node": ">=6"
3728+ }
3729+ },
3730+ "node_modules/escape-string-regexp": {
3731+ "version": "4.0.0",
3732+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
3733+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
3734+ "dev": true,
3735+ "license": "MIT",
3736+ "engines": {
3737+ "node": ">=10"
3738+ },
3739+ "funding": {
3740+ "url": "https://github.com/sponsors/sindresorhus"
3741+ }
3742+ },
3743+ "node_modules/eslint": {
3744+ "version": "9.39.5",
3745+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
3746+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
3747+ "dev": true,
3748+ "license": "MIT",
3749+ "dependencies": {
3750+ "@eslint-community/eslint-utils": "^4.8.0",
3751+ "@eslint-community/regexpp": "^4.12.1",
3752+ "@eslint/config-array": "^0.21.2",
3753+ "@eslint/config-helpers": "^0.4.2",
3754+ "@eslint/core": "^0.17.0",
3755+ "@eslint/eslintrc": "^3.3.6",
3756+ "@eslint/js": "9.39.5",
3757+ "@eslint/plugin-kit": "^0.4.1",
3758+ "@humanfs/node": "^0.16.6",
3759+ "@humanwhocodes/module-importer": "^1.0.1",
3760+ "@humanwhocodes/retry": "^0.4.2",
3761+ "@types/estree": "^1.0.6",
3762+ "ajv": "^6.14.0",
3763+ "chalk": "^4.0.0",
3764+ "cross-spawn": "^7.0.6",
3765+ "debug": "^4.3.2",
3766+ "escape-string-regexp": "^4.0.0",
3767+ "eslint-scope": "^8.4.0",
3768+ "eslint-visitor-keys": "^4.2.1",
3769+ "espree": "^10.4.0",
3770+ "esquery": "^1.5.0",
3771+ "esutils": "^2.0.2",
3772+ "fast-deep-equal": "^3.1.3",
3773+ "file-entry-cache": "^8.0.0",
3774+ "find-up": "^5.0.0",
3775+ "glob-parent": "^6.0.2",
3776+ "ignore": "^5.2.0",
3777+ "imurmurhash": "^0.1.4",
3778+ "is-glob": "^4.0.0",
3779+ "json-stable-stringify-without-jsonify": "^1.0.1",
3780+ "lodash.merge": "^4.6.2",
3781+ "minimatch": "^3.1.5",
3782+ "natural-compare": "^1.4.0",
3783+ "optionator": "^0.9.3"
3784+ },
3785+ "bin": {
3786+ "eslint": "bin/eslint.js"
3787+ },
3788+ "engines": {
3789+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3790+ },
3791+ "funding": {
3792+ "url": "https://eslint.org/donate"
3793+ },
3794+ "peerDependencies": {
3795+ "jiti": "*"
3796+ },
3797+ "peerDependenciesMeta": {
3798+ "jiti": {
3799+ "optional": true
3800+ }
3801+ }
3802+ },
3803+ "node_modules/eslint-config-next": {
3804+ "version": "16.2.12",
3805+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.12.tgz",
3806+ "integrity": "sha512-iaaf4vvKo5h2LBdGt0JuRv7t0Ysqr9FMCiFxbptDg8LqOE//mIKR80DdpOnSVM7qjLH3jT8P0aFiwXxBEGZRXw==",
3807+ "dev": true,
3808+ "license": "MIT",
3809+ "dependencies": {
3810+ "@next/eslint-plugin-next": "16.2.12",
3811+ "eslint-import-resolver-node": "^0.3.6",
3812+ "eslint-import-resolver-typescript": "^3.5.2",
3813+ "eslint-plugin-import": "^2.32.0",
3814+ "eslint-plugin-jsx-a11y": "^6.10.0",
3815+ "eslint-plugin-react": "^7.37.0",
3816+ "eslint-plugin-react-hooks": "^7.0.0",
3817+ "globals": "16.4.0",
3818+ "typescript-eslint": "^8.46.0"
3819+ },
3820+ "peerDependencies": {
3821+ "eslint": ">=9.0.0",
3822+ "typescript": ">=3.3.1"
3823+ },
3824+ "peerDependenciesMeta": {
3825+ "typescript": {
3826+ "optional": true
3827+ }
3828+ }
3829+ },
3830+ "node_modules/eslint-config-next/node_modules/globals": {
3831+ "version": "16.4.0",
3832+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz",
3833+ "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==",
3834+ "dev": true,
3835+ "license": "MIT",
3836+ "engines": {
3837+ "node": ">=18"
3838+ },
3839+ "funding": {
3840+ "url": "https://github.com/sponsors/sindresorhus"
3841+ }
3842+ },
3843+ "node_modules/eslint-import-resolver-node": {
3844+ "version": "0.3.10",
3845+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz",
3846+ "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==",
3847+ "dev": true,
3848+ "license": "MIT",
3849+ "dependencies": {
3850+ "debug": "^3.2.7",
3851+ "is-core-module": "^2.16.1",
3852+ "resolve": "^2.0.0-next.6"
3853+ }
3854+ },
3855+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
3856+ "version": "3.2.7",
3857+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3858+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3859+ "dev": true,
3860+ "license": "MIT",
3861+ "dependencies": {
3862+ "ms": "^2.1.1"
3863+ }
3864+ },
3865+ "node_modules/eslint-import-resolver-typescript": {
3866+ "version": "3.10.1",
3867+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
3868+ "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
3869+ "dev": true,
3870+ "license": "ISC",
3871+ "dependencies": {
3872+ "@nolyfill/is-core-module": "1.0.39",
3873+ "debug": "^4.4.0",
3874+ "get-tsconfig": "^4.10.0",
3875+ "is-bun-module": "^2.0.0",
3876+ "stable-hash": "^0.0.5",
3877+ "tinyglobby": "^0.2.13",
3878+ "unrs-resolver": "^1.6.2"
3879+ },
3880+ "engines": {
3881+ "node": "^14.18.0 || >=16.0.0"
3882+ },
3883+ "funding": {
3884+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
3885+ },
3886+ "peerDependencies": {
3887+ "eslint": "*",
3888+ "eslint-plugin-import": "*",
3889+ "eslint-plugin-import-x": "*"
3890+ },
3891+ "peerDependenciesMeta": {
3892+ "eslint-plugin-import": {
3893+ "optional": true
3894+ },
3895+ "eslint-plugin-import-x": {
3896+ "optional": true
3897+ }
3898+ }
3899+ },
3900+ "node_modules/eslint-module-utils": {
3901+ "version": "2.14.0",
3902+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz",
3903+ "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==",
3904+ "dev": true,
3905+ "license": "MIT",
3906+ "dependencies": {
3907+ "debug": "^3.2.7"
3908+ },
3909+ "engines": {
3910+ "node": ">=4"
3911+ },
3912+ "peerDependenciesMeta": {
3913+ "eslint": {
3914+ "optional": true
3915+ }
3916+ }
3917+ },
3918+ "node_modules/eslint-module-utils/node_modules/debug": {
3919+ "version": "3.2.7",
3920+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3921+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3922+ "dev": true,
3923+ "license": "MIT",
3924+ "dependencies": {
3925+ "ms": "^2.1.1"
3926+ }
3927+ },
3928+ "node_modules/eslint-plugin-import": {
3929+ "version": "2.32.0",
3930+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
3931+ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
3932+ "dev": true,
3933+ "license": "MIT",
3934+ "dependencies": {
3935+ "@rtsao/scc": "^1.1.0",
3936+ "array-includes": "^3.1.9",
3937+ "array.prototype.findlastindex": "^1.2.6",
3938+ "array.prototype.flat": "^1.3.3",
3939+ "array.prototype.flatmap": "^1.3.3",
3940+ "debug": "^3.2.7",
3941+ "doctrine": "^2.1.0",
3942+ "eslint-import-resolver-node": "^0.3.9",
3943+ "eslint-module-utils": "^2.12.1",
3944+ "hasown": "^2.0.2",
3945+ "is-core-module": "^2.16.1",
3946+ "is-glob": "^4.0.3",
3947+ "minimatch": "^3.1.2",
3948+ "object.fromentries": "^2.0.8",
3949+ "object.groupby": "^1.0.3",
3950+ "object.values": "^1.2.1",
3951+ "semver": "^6.3.1",
3952+ "string.prototype.trimend": "^1.0.9",
3953+ "tsconfig-paths": "^3.15.0"
3954+ },
3955+ "engines": {
3956+ "node": ">=4"
3957+ },
3958+ "peerDependencies": {
3959+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
3960+ }
3961+ },
3962+ "node_modules/eslint-plugin-import/node_modules/debug": {
3963+ "version": "3.2.7",
3964+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3965+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3966+ "dev": true,
3967+ "license": "MIT",
3968+ "dependencies": {
3969+ "ms": "^2.1.1"
3970+ }
3971+ },
3972+ "node_modules/eslint-plugin-jsx-a11y": {
3973+ "version": "6.10.2",
3974+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
3975+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
3976+ "dev": true,
3977+ "license": "MIT",
3978+ "dependencies": {
3979+ "aria-query": "^5.3.2",
3980+ "array-includes": "^3.1.8",
3981+ "array.prototype.flatmap": "^1.3.2",
3982+ "ast-types-flow": "^0.0.8",
3983+ "axe-core": "^4.10.0",
3984+ "axobject-query": "^4.1.0",
3985+ "damerau-levenshtein": "^1.0.8",
3986+ "emoji-regex": "^9.2.2",
3987+ "hasown": "^2.0.2",
3988+ "jsx-ast-utils": "^3.3.5",
3989+ "language-tags": "^1.0.9",
3990+ "minimatch": "^3.1.2",
3991+ "object.fromentries": "^2.0.8",
3992+ "safe-regex-test": "^1.0.3",
3993+ "string.prototype.includes": "^2.0.1"
3994+ },
3995+ "engines": {
3996+ "node": ">=4.0"
3997+ },
3998+ "peerDependencies": {
3999+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
4000+ }
4001+ },
4002+ "node_modules/eslint-plugin-react": {
4003+ "version": "7.37.5",
4004+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
4005+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
4006+ "dev": true,
4007+ "license": "MIT",
4008+ "dependencies": {
4009+ "array-includes": "^3.1.8",
4010+ "array.prototype.findlast": "^1.2.5",
4011+ "array.prototype.flatmap": "^1.3.3",
4012+ "array.prototype.tosorted": "^1.1.4",
4013+ "doctrine": "^2.1.0",
4014+ "es-iterator-helpers": "^1.2.1",
4015+ "estraverse": "^5.3.0",
4016+ "hasown": "^2.0.2",
4017+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
4018+ "minimatch": "^3.1.2",
4019+ "object.entries": "^1.1.9",
4020+ "object.fromentries": "^2.0.8",
4021+ "object.values": "^1.2.1",
4022+ "prop-types": "^15.8.1",
4023+ "resolve": "^2.0.0-next.5",
4024+ "semver": "^6.3.1",
4025+ "string.prototype.matchall": "^4.0.12",
4026+ "string.prototype.repeat": "^1.0.0"
4027+ },
4028+ "engines": {
4029+ "node": ">=4"
4030+ },
4031+ "peerDependencies": {
4032+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
4033+ }
4034+ },
4035+ "node_modules/eslint-plugin-react-hooks": {
4036+ "version": "7.1.1",
4037+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
4038+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
4039+ "dev": true,
4040+ "license": "MIT",
4041+ "dependencies": {
4042+ "@babel/core": "^7.24.4",
4043+ "@babel/parser": "^7.24.4",
4044+ "hermes-parser": "^0.25.1",
4045+ "zod": "^3.25.0 || ^4.0.0",
4046+ "zod-validation-error": "^3.5.0 || ^4.0.0"
4047+ },
4048+ "engines": {
4049+ "node": ">=18"
4050+ },
4051+ "peerDependencies": {
4052+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
4053+ }
4054+ },
4055+ "node_modules/eslint-scope": {
4056+ "version": "8.4.0",
4057+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
4058+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
4059+ "dev": true,
4060+ "license": "BSD-2-Clause",
4061+ "dependencies": {
4062+ "esrecurse": "^4.3.0",
4063+ "estraverse": "^5.2.0"
4064+ },
4065+ "engines": {
4066+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4067+ },
4068+ "funding": {
4069+ "url": "https://opencollective.com/eslint"
4070+ }
4071+ },
4072+ "node_modules/eslint-visitor-keys": {
4073+ "version": "4.2.1",
4074+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
4075+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
4076+ "dev": true,
4077+ "license": "Apache-2.0",
4078+ "engines": {
4079+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4080+ },
4081+ "funding": {
4082+ "url": "https://opencollective.com/eslint"
4083+ }
4084+ },
4085+ "node_modules/espree": {
4086+ "version": "10.4.0",
4087+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
4088+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
4089+ "dev": true,
4090+ "license": "BSD-2-Clause",
4091+ "dependencies": {
4092+ "acorn": "^8.15.0",
4093+ "acorn-jsx": "^5.3.2",
4094+ "eslint-visitor-keys": "^4.2.1"
4095+ },
4096+ "engines": {
4097+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4098+ },
4099+ "funding": {
4100+ "url": "https://opencollective.com/eslint"
4101+ }
4102+ },
4103+ "node_modules/esquery": {
4104+ "version": "1.7.0",
4105+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
4106+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
4107+ "dev": true,
4108+ "license": "BSD-3-Clause",
4109+ "dependencies": {
4110+ "estraverse": "^5.1.0"
4111+ },
4112+ "engines": {
4113+ "node": ">=0.10"
4114+ }
4115+ },
4116+ "node_modules/esrecurse": {
4117+ "version": "4.3.0",
4118+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
4119+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
4120+ "dev": true,
4121+ "license": "BSD-2-Clause",
4122+ "dependencies": {
4123+ "estraverse": "^5.2.0"
4124+ },
4125+ "engines": {
4126+ "node": ">=4.0"
4127+ }
4128+ },
4129+ "node_modules/estraverse": {
4130+ "version": "5.3.0",
4131+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
4132+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
4133+ "dev": true,
4134+ "license": "BSD-2-Clause",
4135+ "engines": {
4136+ "node": ">=4.0"
4137+ }
4138+ },
4139+ "node_modules/esutils": {
4140+ "version": "2.0.3",
4141+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
4142+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
4143+ "dev": true,
4144+ "license": "BSD-2-Clause",
4145+ "engines": {
4146+ "node": ">=0.10.0"
4147+ }
4148+ },
4149+ "node_modules/fast-deep-equal": {
4150+ "version": "3.1.3",
4151+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
4152+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
4153+ "dev": true,
4154+ "license": "MIT"
4155+ },
4156+ "node_modules/fast-glob": {
4157+ "version": "3.3.1",
4158+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
4159+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
4160+ "dev": true,
4161+ "license": "MIT",
4162+ "dependencies": {
4163+ "@nodelib/fs.stat": "^2.0.2",
4164+ "@nodelib/fs.walk": "^1.2.3",
4165+ "glob-parent": "^5.1.2",
4166+ "merge2": "^1.3.0",
4167+ "micromatch": "^4.0.4"
4168+ },
4169+ "engines": {
4170+ "node": ">=8.6.0"
4171+ }
4172+ },
4173+ "node_modules/fast-glob/node_modules/glob-parent": {
4174+ "version": "5.1.2",
4175+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
4176+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
4177+ "dev": true,
4178+ "license": "ISC",
4179+ "dependencies": {
4180+ "is-glob": "^4.0.1"
4181+ },
4182+ "engines": {
4183+ "node": ">= 6"
4184+ }
4185+ },
4186+ "node_modules/fast-json-stable-stringify": {
4187+ "version": "2.1.0",
4188+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
4189+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
4190+ "dev": true,
4191+ "license": "MIT"
4192+ },
4193+ "node_modules/fast-levenshtein": {
4194+ "version": "2.0.6",
4195+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
4196+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
4197+ "dev": true,
4198+ "license": "MIT"
4199+ },
4200+ "node_modules/fastq": {
4201+ "version": "1.20.1",
4202+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
4203+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
4204+ "dev": true,
4205+ "license": "ISC",
4206+ "dependencies": {
4207+ "reusify": "^1.0.4"
4208+ }
4209+ },
4210+ "node_modules/file-entry-cache": {
4211+ "version": "8.0.0",
4212+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
4213+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
4214+ "dev": true,
4215+ "license": "MIT",
4216+ "dependencies": {
4217+ "flat-cache": "^4.0.0"
4218+ },
4219+ "engines": {
4220+ "node": ">=16.0.0"
4221+ }
4222+ },
4223+ "node_modules/fill-range": {
4224+ "version": "7.1.1",
4225+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
4226+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
4227+ "dev": true,
4228+ "license": "MIT",
4229+ "dependencies": {
4230+ "to-regex-range": "^5.0.1"
4231+ },
4232+ "engines": {
4233+ "node": ">=8"
4234+ }
4235+ },
4236+ "node_modules/find-up": {
4237+ "version": "5.0.0",
4238+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
4239+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
4240+ "dev": true,
4241+ "license": "MIT",
4242+ "dependencies": {
4243+ "locate-path": "^6.0.0",
4244+ "path-exists": "^4.0.0"
4245+ },
4246+ "engines": {
4247+ "node": ">=10"
4248+ },
4249+ "funding": {
4250+ "url": "https://github.com/sponsors/sindresorhus"
4251+ }
4252+ },
4253+ "node_modules/flat-cache": {
4254+ "version": "4.0.1",
4255+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
4256+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
4257+ "dev": true,
4258+ "license": "MIT",
4259+ "dependencies": {
4260+ "flatted": "^3.2.9",
4261+ "keyv": "^4.5.4"
4262+ },
4263+ "engines": {
4264+ "node": ">=16"
4265+ }
4266+ },
4267+ "node_modules/flatted": {
4268+ "version": "3.4.4",
4269+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
4270+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
4271+ "dev": true,
4272+ "license": "ISC"
4273+ },
4274+ "node_modules/for-each": {
4275+ "version": "0.3.5",
4276+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
4277+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
4278+ "dev": true,
4279+ "license": "MIT",
4280+ "dependencies": {
4281+ "is-callable": "^1.2.7"
4282+ },
4283+ "engines": {
4284+ "node": ">= 0.4"
4285+ },
4286+ "funding": {
4287+ "url": "https://github.com/sponsors/ljharb"
4288+ }
4289+ },
4290+ "node_modules/fsevents": {
4291+ "version": "2.3.3",
4292+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
4293+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
4294+ "dev": true,
4295+ "hasInstallScript": true,
4296+ "license": "MIT",
4297+ "optional": true,
4298+ "os": [
4299+ "darwin"
4300+ ],
4301+ "engines": {
4302+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
4303+ }
4304+ },
4305+ "node_modules/function-bind": {
4306+ "version": "1.1.2",
4307+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
4308+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
4309+ "dev": true,
4310+ "license": "MIT",
4311+ "funding": {
4312+ "url": "https://github.com/sponsors/ljharb"
4313+ }
4314+ },
4315+ "node_modules/function.prototype.name": {
4316+ "version": "1.2.0",
4317+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz",
4318+ "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==",
4319+ "dev": true,
4320+ "license": "MIT",
4321+ "dependencies": {
4322+ "call-bind": "^1.0.9",
4323+ "call-bound": "^1.0.4",
4324+ "es-define-property": "^1.0.1",
4325+ "es-errors": "^1.3.0",
4326+ "functions-have-names": "^1.2.3",
4327+ "has-property-descriptors": "^1.0.2",
4328+ "hasown": "^2.0.4",
4329+ "is-callable": "^1.2.7",
4330+ "is-document.all": "^1.0.0"
4331+ },
4332+ "engines": {
4333+ "node": ">= 0.4"
4334+ },
4335+ "funding": {
4336+ "url": "https://github.com/sponsors/ljharb"
4337+ }
4338+ },
4339+ "node_modules/functions-have-names": {
4340+ "version": "1.2.3",
4341+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
4342+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
4343+ "dev": true,
4344+ "license": "MIT",
4345+ "funding": {
4346+ "url": "https://github.com/sponsors/ljharb"
4347+ }
4348+ },
4349+ "node_modules/generator-function": {
4350+ "version": "2.0.1",
4351+ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
4352+ "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
4353+ "dev": true,
4354+ "license": "MIT",
4355+ "engines": {
4356+ "node": ">= 0.4"
4357+ }
4358+ },
4359+ "node_modules/gensync": {
4360+ "version": "1.0.0-beta.2",
4361+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
4362+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
4363+ "dev": true,
4364+ "license": "MIT",
4365+ "engines": {
4366+ "node": ">=6.9.0"
4367+ }
4368+ },
4369+ "node_modules/get-intrinsic": {
4370+ "version": "1.3.0",
4371+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
4372+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
4373+ "dev": true,
4374+ "license": "MIT",
4375+ "dependencies": {
4376+ "call-bind-apply-helpers": "^1.0.2",
4377+ "es-define-property": "^1.0.1",
4378+ "es-errors": "^1.3.0",
4379+ "es-object-atoms": "^1.1.1",
4380+ "function-bind": "^1.1.2",
4381+ "get-proto": "^1.0.1",
4382+ "gopd": "^1.2.0",
4383+ "has-symbols": "^1.1.0",
4384+ "hasown": "^2.0.2",
4385+ "math-intrinsics": "^1.1.0"
4386+ },
4387+ "engines": {
4388+ "node": ">= 0.4"
4389+ },
4390+ "funding": {
4391+ "url": "https://github.com/sponsors/ljharb"
4392+ }
4393+ },
4394+ "node_modules/get-proto": {
4395+ "version": "1.0.1",
4396+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
4397+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
4398+ "dev": true,
4399+ "license": "MIT",
4400+ "dependencies": {
4401+ "dunder-proto": "^1.0.1",
4402+ "es-object-atoms": "^1.0.0"
4403+ },
4404+ "engines": {
4405+ "node": ">= 0.4"
4406+ }
4407+ },
4408+ "node_modules/get-symbol-description": {
4409+ "version": "1.1.0",
4410+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
4411+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
4412+ "dev": true,
4413+ "license": "MIT",
4414+ "dependencies": {
4415+ "call-bound": "^1.0.3",
4416+ "es-errors": "^1.3.0",
4417+ "get-intrinsic": "^1.2.6"
4418+ },
4419+ "engines": {
4420+ "node": ">= 0.4"
4421+ },
4422+ "funding": {
4423+ "url": "https://github.com/sponsors/ljharb"
4424+ }
4425+ },
4426+ "node_modules/get-tsconfig": {
4427+ "version": "4.14.1",
4428+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.1.tgz",
4429+ "integrity": "sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==",
4430+ "dev": true,
4431+ "license": "MIT",
4432+ "dependencies": {
4433+ "resolve-pkg-maps": "^1.0.0"
4434+ },
4435+ "funding": {
4436+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
4437+ }
4438+ },
4439+ "node_modules/glob-parent": {
4440+ "version": "6.0.2",
4441+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
4442+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
4443+ "dev": true,
4444+ "license": "ISC",
4445+ "dependencies": {
4446+ "is-glob": "^4.0.3"
4447+ },
4448+ "engines": {
4449+ "node": ">=10.13.0"
4450+ }
4451+ },
4452+ "node_modules/globals": {
4453+ "version": "14.0.0",
4454+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
4455+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
4456+ "dev": true,
4457+ "license": "MIT",
4458+ "engines": {
4459+ "node": ">=18"
4460+ },
4461+ "funding": {
4462+ "url": "https://github.com/sponsors/sindresorhus"
4463+ }
4464+ },
4465+ "node_modules/globalthis": {
4466+ "version": "1.0.4",
4467+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
4468+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
4469+ "dev": true,
4470+ "license": "MIT",
4471+ "dependencies": {
4472+ "define-properties": "^1.2.1",
4473+ "gopd": "^1.0.1"
4474+ },
4475+ "engines": {
4476+ "node": ">= 0.4"
4477+ },
4478+ "funding": {
4479+ "url": "https://github.com/sponsors/ljharb"
4480+ }
4481+ },
4482+ "node_modules/gopd": {
4483+ "version": "1.2.0",
4484+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
4485+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
4486+ "dev": true,
4487+ "license": "MIT",
4488+ "engines": {
4489+ "node": ">= 0.4"
4490+ },
4491+ "funding": {
4492+ "url": "https://github.com/sponsors/ljharb"
4493+ }
4494+ },
4495+ "node_modules/graceful-fs": {
4496+ "version": "4.2.11",
4497+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
4498+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
4499+ "dev": true,
4500+ "license": "ISC"
4501+ },
4502+ "node_modules/has-bigints": {
4503+ "version": "1.1.0",
4504+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
4505+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
4506+ "dev": true,
4507+ "license": "MIT",
4508+ "engines": {
4509+ "node": ">= 0.4"
4510+ },
4511+ "funding": {
4512+ "url": "https://github.com/sponsors/ljharb"
4513+ }
4514+ },
4515+ "node_modules/has-flag": {
4516+ "version": "4.0.0",
4517+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4518+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4519+ "dev": true,
4520+ "license": "MIT",
4521+ "engines": {
4522+ "node": ">=8"
4523+ }
4524+ },
4525+ "node_modules/has-property-descriptors": {
4526+ "version": "1.0.2",
4527+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
4528+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
4529+ "dev": true,
4530+ "license": "MIT",
4531+ "dependencies": {
4532+ "es-define-property": "^1.0.0"
4533+ },
4534+ "funding": {
4535+ "url": "https://github.com/sponsors/ljharb"
4536+ }
4537+ },
4538+ "node_modules/has-proto": {
4539+ "version": "1.2.0",
4540+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
4541+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
4542+ "dev": true,
4543+ "license": "MIT",
4544+ "dependencies": {
4545+ "dunder-proto": "^1.0.0"
4546+ },
4547+ "engines": {
4548+ "node": ">= 0.4"
4549+ },
4550+ "funding": {
4551+ "url": "https://github.com/sponsors/ljharb"
4552+ }
4553+ },
4554+ "node_modules/has-symbols": {
4555+ "version": "1.1.0",
4556+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
4557+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
4558+ "dev": true,
4559+ "license": "MIT",
4560+ "engines": {
4561+ "node": ">= 0.4"
4562+ },
4563+ "funding": {
4564+ "url": "https://github.com/sponsors/ljharb"
4565+ }
4566+ },
4567+ "node_modules/has-tostringtag": {
4568+ "version": "1.0.2",
4569+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
4570+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
4571+ "dev": true,
4572+ "license": "MIT",
4573+ "dependencies": {
4574+ "has-symbols": "^1.0.3"
4575+ },
4576+ "engines": {
4577+ "node": ">= 0.4"
4578+ },
4579+ "funding": {
4580+ "url": "https://github.com/sponsors/ljharb"
4581+ }
4582+ },
4583+ "node_modules/hasown": {
4584+ "version": "2.0.4",
4585+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
4586+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
4587+ "dev": true,
4588+ "license": "MIT",
4589+ "dependencies": {
4590+ "function-bind": "^1.1.2"
4591+ },
4592+ "engines": {
4593+ "node": ">= 0.4"
4594+ }
4595+ },
4596+ "node_modules/hermes-estree": {
4597+ "version": "0.25.1",
4598+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
4599+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
4600+ "dev": true,
4601+ "license": "MIT"
4602+ },
4603+ "node_modules/hermes-parser": {
4604+ "version": "0.25.1",
4605+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
4606+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
4607+ "dev": true,
4608+ "license": "MIT",
4609+ "dependencies": {
4610+ "hermes-estree": "0.25.1"
4611+ }
4612+ },
4613+ "node_modules/ignore": {
4614+ "version": "5.3.2",
4615+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
4616+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
4617+ "dev": true,
4618+ "license": "MIT",
4619+ "engines": {
4620+ "node": ">= 4"
4621+ }
4622+ },
4623+ "node_modules/import-fresh": {
4624+ "version": "3.3.1",
4625+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
4626+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
4627+ "dev": true,
4628+ "license": "MIT",
4629+ "dependencies": {
4630+ "parent-module": "^1.0.0",
4631+ "resolve-from": "^4.0.0"
4632+ },
4633+ "engines": {
4634+ "node": ">=6"
4635+ },
4636+ "funding": {
4637+ "url": "https://github.com/sponsors/sindresorhus"
4638+ }
4639+ },
4640+ "node_modules/imurmurhash": {
4641+ "version": "0.1.4",
4642+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
4643+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
4644+ "dev": true,
4645+ "license": "MIT",
4646+ "engines": {
4647+ "node": ">=0.8.19"
4648+ }
4649+ },
4650+ "node_modules/internal-slot": {
4651+ "version": "1.1.0",
4652+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
4653+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
4654+ "dev": true,
4655+ "license": "MIT",
4656+ "dependencies": {
4657+ "es-errors": "^1.3.0",
4658+ "hasown": "^2.0.2",
4659+ "side-channel": "^1.1.0"
4660+ },
4661+ "engines": {
4662+ "node": ">= 0.4"
4663+ }
4664+ },
4665+ "node_modules/is-array-buffer": {
4666+ "version": "3.0.5",
4667+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
4668+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
4669+ "dev": true,
4670+ "license": "MIT",
4671+ "dependencies": {
4672+ "call-bind": "^1.0.8",
4673+ "call-bound": "^1.0.3",
4674+ "get-intrinsic": "^1.2.6"
4675+ },
4676+ "engines": {
4677+ "node": ">= 0.4"
4678+ },
4679+ "funding": {
4680+ "url": "https://github.com/sponsors/ljharb"
4681+ }
4682+ },
4683+ "node_modules/is-async-function": {
4684+ "version": "2.1.1",
4685+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
4686+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
4687+ "dev": true,
4688+ "license": "MIT",
4689+ "dependencies": {
4690+ "async-function": "^1.0.0",
4691+ "call-bound": "^1.0.3",
4692+ "get-proto": "^1.0.1",
4693+ "has-tostringtag": "^1.0.2",
4694+ "safe-regex-test": "^1.1.0"
4695+ },
4696+ "engines": {
4697+ "node": ">= 0.4"
4698+ },
4699+ "funding": {
4700+ "url": "https://github.com/sponsors/ljharb"
4701+ }
4702+ },
4703+ "node_modules/is-bigint": {
4704+ "version": "1.1.0",
4705+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
4706+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
4707+ "dev": true,
4708+ "license": "MIT",
4709+ "dependencies": {
4710+ "has-bigints": "^1.0.2"
4711+ },
4712+ "engines": {
4713+ "node": ">= 0.4"
4714+ },
4715+ "funding": {
4716+ "url": "https://github.com/sponsors/ljharb"
4717+ }
4718+ },
4719+ "node_modules/is-boolean-object": {
4720+ "version": "1.2.2",
4721+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
4722+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
4723+ "dev": true,
4724+ "license": "MIT",
4725+ "dependencies": {
4726+ "call-bound": "^1.0.3",
4727+ "has-tostringtag": "^1.0.2"
4728+ },
4729+ "engines": {
4730+ "node": ">= 0.4"
4731+ },
4732+ "funding": {
4733+ "url": "https://github.com/sponsors/ljharb"
4734+ }
4735+ },
4736+ "node_modules/is-bun-module": {
4737+ "version": "2.0.0",
4738+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
4739+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
4740+ "dev": true,
4741+ "license": "MIT",
4742+ "dependencies": {
4743+ "semver": "^7.7.1"
4744+ }
4745+ },
4746+ "node_modules/is-bun-module/node_modules/semver": {
4747+ "version": "7.8.5",
4748+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
4749+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
4750+ "dev": true,
4751+ "license": "ISC",
4752+ "bin": {
4753+ "semver": "bin/semver.js"
4754+ },
4755+ "engines": {
4756+ "node": ">=10"
4757+ }
4758+ },
4759+ "node_modules/is-callable": {
4760+ "version": "1.2.7",
4761+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
4762+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
4763+ "dev": true,
4764+ "license": "MIT",
4765+ "engines": {
4766+ "node": ">= 0.4"
4767+ },
4768+ "funding": {
4769+ "url": "https://github.com/sponsors/ljharb"
4770+ }
4771+ },
4772+ "node_modules/is-core-module": {
4773+ "version": "2.16.2",
4774+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
4775+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
4776+ "dev": true,
4777+ "license": "MIT",
4778+ "dependencies": {
4779+ "hasown": "^2.0.3"
4780+ },
4781+ "engines": {
4782+ "node": ">= 0.4"
4783+ },
4784+ "funding": {
4785+ "url": "https://github.com/sponsors/ljharb"
4786+ }
4787+ },
4788+ "node_modules/is-data-view": {
4789+ "version": "1.0.2",
4790+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
4791+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
4792+ "dev": true,
4793+ "license": "MIT",
4794+ "dependencies": {
4795+ "call-bound": "^1.0.2",
4796+ "get-intrinsic": "^1.2.6",
4797+ "is-typed-array": "^1.1.13"
4798+ },
4799+ "engines": {
4800+ "node": ">= 0.4"
4801+ },
4802+ "funding": {
4803+ "url": "https://github.com/sponsors/ljharb"
4804+ }
4805+ },
4806+ "node_modules/is-date-object": {
4807+ "version": "1.1.0",
4808+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
4809+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
4810+ "dev": true,
4811+ "license": "MIT",
4812+ "dependencies": {
4813+ "call-bound": "^1.0.2",
4814+ "has-tostringtag": "^1.0.2"
4815+ },
4816+ "engines": {
4817+ "node": ">= 0.4"
4818+ },
4819+ "funding": {
4820+ "url": "https://github.com/sponsors/ljharb"
4821+ }
4822+ },
4823+ "node_modules/is-document.all": {
4824+ "version": "1.0.0",
4825+ "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz",
4826+ "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==",
4827+ "dev": true,
4828+ "license": "MIT",
4829+ "dependencies": {
4830+ "call-bound": "^1.0.4"
4831+ },
4832+ "engines": {
4833+ "node": ">= 0.4"
4834+ },
4835+ "funding": {
4836+ "url": "https://github.com/sponsors/ljharb"
4837+ }
4838+ },
4839+ "node_modules/is-extglob": {
4840+ "version": "2.1.1",
4841+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
4842+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
4843+ "dev": true,
4844+ "license": "MIT",
4845+ "engines": {
4846+ "node": ">=0.10.0"
4847+ }
4848+ },
4849+ "node_modules/is-finalizationregistry": {
4850+ "version": "1.1.1",
4851+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
4852+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
4853+ "dev": true,
4854+ "license": "MIT",
4855+ "dependencies": {
4856+ "call-bound": "^1.0.3"
4857+ },
4858+ "engines": {
4859+ "node": ">= 0.4"
4860+ },
4861+ "funding": {
4862+ "url": "https://github.com/sponsors/ljharb"
4863+ }
4864+ },
4865+ "node_modules/is-generator-function": {
4866+ "version": "1.1.2",
4867+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
4868+ "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
4869+ "dev": true,
4870+ "license": "MIT",
4871+ "dependencies": {
4872+ "call-bound": "^1.0.4",
4873+ "generator-function": "^2.0.0",
4874+ "get-proto": "^1.0.1",
4875+ "has-tostringtag": "^1.0.2",
4876+ "safe-regex-test": "^1.1.0"
4877+ },
4878+ "engines": {
4879+ "node": ">= 0.4"
4880+ },
4881+ "funding": {
4882+ "url": "https://github.com/sponsors/ljharb"
4883+ }
4884+ },
4885+ "node_modules/is-glob": {
4886+ "version": "4.0.3",
4887+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
4888+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
4889+ "dev": true,
4890+ "license": "MIT",
4891+ "dependencies": {
4892+ "is-extglob": "^2.1.1"
4893+ },
4894+ "engines": {
4895+ "node": ">=0.10.0"
4896+ }
4897+ },
4898+ "node_modules/is-map": {
4899+ "version": "2.0.3",
4900+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
4901+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
4902+ "dev": true,
4903+ "license": "MIT",
4904+ "engines": {
4905+ "node": ">= 0.4"
4906+ },
4907+ "funding": {
4908+ "url": "https://github.com/sponsors/ljharb"
4909+ }
4910+ },
4911+ "node_modules/is-negative-zero": {
4912+ "version": "2.0.3",
4913+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
4914+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
4915+ "dev": true,
4916+ "license": "MIT",
4917+ "engines": {
4918+ "node": ">= 0.4"
4919+ },
4920+ "funding": {
4921+ "url": "https://github.com/sponsors/ljharb"
4922+ }
4923+ },
4924+ "node_modules/is-number": {
4925+ "version": "7.0.0",
4926+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
4927+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
4928+ "dev": true,
4929+ "license": "MIT",
4930+ "engines": {
4931+ "node": ">=0.12.0"
4932+ }
4933+ },
4934+ "node_modules/is-number-object": {
4935+ "version": "1.1.1",
4936+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
4937+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
4938+ "dev": true,
4939+ "license": "MIT",
4940+ "dependencies": {
4941+ "call-bound": "^1.0.3",
4942+ "has-tostringtag": "^1.0.2"
4943+ },
4944+ "engines": {
4945+ "node": ">= 0.4"
4946+ },
4947+ "funding": {
4948+ "url": "https://github.com/sponsors/ljharb"
4949+ }
4950+ },
4951+ "node_modules/is-regex": {
4952+ "version": "1.2.1",
4953+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
4954+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
4955+ "dev": true,
4956+ "license": "MIT",
4957+ "dependencies": {
4958+ "call-bound": "^1.0.2",
4959+ "gopd": "^1.2.0",
4960+ "has-tostringtag": "^1.0.2",
4961+ "hasown": "^2.0.2"
4962+ },
4963+ "engines": {
4964+ "node": ">= 0.4"
4965+ },
4966+ "funding": {
4967+ "url": "https://github.com/sponsors/ljharb"
4968+ }
4969+ },
4970+ "node_modules/is-set": {
4971+ "version": "2.0.3",
4972+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
4973+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
4974+ "dev": true,
4975+ "license": "MIT",
4976+ "engines": {
4977+ "node": ">= 0.4"
4978+ },
4979+ "funding": {
4980+ "url": "https://github.com/sponsors/ljharb"
4981+ }
4982+ },
4983+ "node_modules/is-shared-array-buffer": {
4984+ "version": "1.0.4",
4985+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
4986+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
4987+ "dev": true,
4988+ "license": "MIT",
4989+ "dependencies": {
4990+ "call-bound": "^1.0.3"
4991+ },
4992+ "engines": {
4993+ "node": ">= 0.4"
4994+ },
4995+ "funding": {
4996+ "url": "https://github.com/sponsors/ljharb"
4997+ }
4998+ },
4999+ "node_modules/is-string": {
5000+ "version": "1.1.1",
5001+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
5002+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
5003+ "dev": true,
5004+ "license": "MIT",
5005+ "dependencies": {
5006+ "call-bound": "^1.0.3",
5007+ "has-tostringtag": "^1.0.2"
5008+ },
5009+ "engines": {
5010+ "node": ">= 0.4"
5011+ },
5012+ "funding": {
5013+ "url": "https://github.com/sponsors/ljharb"
5014+ }
5015+ },
5016+ "node_modules/is-symbol": {
5017+ "version": "1.1.1",
5018+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
5019+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
5020+ "dev": true,
5021+ "license": "MIT",
5022+ "dependencies": {
5023+ "call-bound": "^1.0.2",
5024+ "has-symbols": "^1.1.0",
5025+ "safe-regex-test": "^1.1.0"
5026+ },
5027+ "engines": {
5028+ "node": ">= 0.4"
5029+ },
5030+ "funding": {
5031+ "url": "https://github.com/sponsors/ljharb"
5032+ }
5033+ },
5034+ "node_modules/is-typed-array": {
5035+ "version": "1.1.15",
5036+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
5037+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
5038+ "dev": true,
5039+ "license": "MIT",
5040+ "dependencies": {
5041+ "which-typed-array": "^1.1.16"
5042+ },
5043+ "engines": {
5044+ "node": ">= 0.4"
5045+ },
5046+ "funding": {
5047+ "url": "https://github.com/sponsors/ljharb"
5048+ }
5049+ },
5050+ "node_modules/is-weakmap": {
5051+ "version": "2.0.2",
5052+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
5053+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
5054+ "dev": true,
5055+ "license": "MIT",
5056+ "engines": {
5057+ "node": ">= 0.4"
5058+ },
5059+ "funding": {
5060+ "url": "https://github.com/sponsors/ljharb"
5061+ }
5062+ },
5063+ "node_modules/is-weakref": {
5064+ "version": "1.1.1",
5065+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
5066+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
5067+ "dev": true,
5068+ "license": "MIT",
5069+ "dependencies": {
5070+ "call-bound": "^1.0.3"
5071+ },
5072+ "engines": {
5073+ "node": ">= 0.4"
5074+ },
5075+ "funding": {
5076+ "url": "https://github.com/sponsors/ljharb"
5077+ }
5078+ },
5079+ "node_modules/is-weakset": {
5080+ "version": "2.0.4",
5081+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
5082+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
5083+ "dev": true,
5084+ "license": "MIT",
5085+ "dependencies": {
5086+ "call-bound": "^1.0.3",
5087+ "get-intrinsic": "^1.2.6"
5088+ },
5089+ "engines": {
5090+ "node": ">= 0.4"
5091+ },
5092+ "funding": {
5093+ "url": "https://github.com/sponsors/ljharb"
5094+ }
5095+ },
5096+ "node_modules/isarray": {
5097+ "version": "2.0.5",
5098+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
5099+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
5100+ "dev": true,
5101+ "license": "MIT"
5102+ },
5103+ "node_modules/isexe": {
5104+ "version": "2.0.0",
5105+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5106+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
5107+ "dev": true,
5108+ "license": "ISC"
5109+ },
5110+ "node_modules/iterator.prototype": {
5111+ "version": "1.1.5",
5112+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
5113+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
5114+ "dev": true,
5115+ "license": "MIT",
5116+ "dependencies": {
5117+ "define-data-property": "^1.1.4",
5118+ "es-object-atoms": "^1.0.0",
5119+ "get-intrinsic": "^1.2.6",
5120+ "get-proto": "^1.0.0",
5121+ "has-symbols": "^1.1.0",
5122+ "set-function-name": "^2.0.2"
5123+ },
5124+ "engines": {
5125+ "node": ">= 0.4"
5126+ }
5127+ },
5128+ "node_modules/jiti": {
5129+ "version": "2.7.0",
5130+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
5131+ "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
5132+ "dev": true,
5133+ "license": "MIT",
5134+ "bin": {
5135+ "jiti": "lib/jiti-cli.mjs"
5136+ }
5137+ },
5138+ "node_modules/js-tokens": {
5139+ "version": "4.0.0",
5140+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
5141+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
5142+ "dev": true,
5143+ "license": "MIT"
5144+ },
5145+ "node_modules/js-yaml": {
5146+ "version": "4.3.1",
5147+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
5148+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
5149+ "dev": true,
5150+ "funding": [
5151+ {
5152+ "type": "github",
5153+ "url": "https://github.com/sponsors/puzrin"
5154+ },
5155+ {
5156+ "type": "github",
5157+ "url": "https://github.com/sponsors/nodeca"
5158+ }
5159+ ],
5160+ "license": "MIT",
5161+ "dependencies": {
5162+ "argparse": "^2.0.1"
5163+ },
5164+ "bin": {
5165+ "js-yaml": "bin/js-yaml.js"
5166+ }
5167+ },
5168+ "node_modules/jsesc": {
5169+ "version": "3.1.0",
5170+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
5171+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
5172+ "dev": true,
5173+ "license": "MIT",
5174+ "bin": {
5175+ "jsesc": "bin/jsesc"
5176+ },
5177+ "engines": {
5178+ "node": ">=6"
5179+ }
5180+ },
5181+ "node_modules/json-buffer": {
5182+ "version": "3.0.1",
5183+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
5184+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
5185+ "dev": true,
5186+ "license": "MIT"
5187+ },
5188+ "node_modules/json-schema-traverse": {
5189+ "version": "0.4.1",
5190+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
5191+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
5192+ "dev": true,
5193+ "license": "MIT"
5194+ },
5195+ "node_modules/json-stable-stringify-without-jsonify": {
5196+ "version": "1.0.1",
5197+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
5198+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
5199+ "dev": true,
5200+ "license": "MIT"
5201+ },
5202+ "node_modules/json5": {
5203+ "version": "2.2.3",
5204+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
5205+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
5206+ "dev": true,
5207+ "license": "MIT",
5208+ "bin": {
5209+ "json5": "lib/cli.js"
5210+ },
5211+ "engines": {
5212+ "node": ">=6"
5213+ }
5214+ },
5215+ "node_modules/jsx-ast-utils": {
5216+ "version": "3.3.5",
5217+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
5218+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
5219+ "dev": true,
5220+ "license": "MIT",
5221+ "dependencies": {
5222+ "array-includes": "^3.1.6",
5223+ "array.prototype.flat": "^1.3.1",
5224+ "object.assign": "^4.1.4",
5225+ "object.values": "^1.1.6"
5226+ },
5227+ "engines": {
5228+ "node": ">=4.0"
5229+ }
5230+ },
5231+ "node_modules/keyv": {
5232+ "version": "4.5.4",
5233+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
5234+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
5235+ "dev": true,
5236+ "license": "MIT",
5237+ "dependencies": {
5238+ "json-buffer": "3.0.1"
5239+ }
5240+ },
5241+ "node_modules/language-subtag-registry": {
5242+ "version": "0.3.23",
5243+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
5244+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
5245+ "dev": true,
5246+ "license": "CC0-1.0"
5247+ },
5248+ "node_modules/language-tags": {
5249+ "version": "1.0.9",
5250+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
5251+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
5252+ "dev": true,
5253+ "license": "MIT",
5254+ "dependencies": {
5255+ "language-subtag-registry": "^0.3.20"
5256+ },
5257+ "engines": {
5258+ "node": ">=0.10"
5259+ }
5260+ },
5261+ "node_modules/levn": {
5262+ "version": "0.4.1",
5263+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
5264+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
5265+ "dev": true,
5266+ "license": "MIT",
5267+ "dependencies": {
5268+ "prelude-ls": "^1.2.1",
5269+ "type-check": "~0.4.0"
5270+ },
5271+ "engines": {
5272+ "node": ">= 0.8.0"
5273+ }
5274+ },
5275+ "node_modules/lightningcss": {
5276+ "version": "1.32.0",
5277+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
5278+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
5279+ "dev": true,
5280+ "license": "MPL-2.0",
5281+ "dependencies": {
5282+ "detect-libc": "^2.0.3"
5283+ },
5284+ "engines": {
5285+ "node": ">= 12.0.0"
5286+ },
5287+ "funding": {
5288+ "type": "opencollective",
5289+ "url": "https://opencollective.com/parcel"
5290+ },
5291+ "optionalDependencies": {
5292+ "lightningcss-android-arm64": "1.32.0",
5293+ "lightningcss-darwin-arm64": "1.32.0",
5294+ "lightningcss-darwin-x64": "1.32.0",
5295+ "lightningcss-freebsd-x64": "1.32.0",
5296+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
5297+ "lightningcss-linux-arm64-gnu": "1.32.0",
5298+ "lightningcss-linux-arm64-musl": "1.32.0",
5299+ "lightningcss-linux-x64-gnu": "1.32.0",
5300+ "lightningcss-linux-x64-musl": "1.32.0",
5301+ "lightningcss-win32-arm64-msvc": "1.32.0",
5302+ "lightningcss-win32-x64-msvc": "1.32.0"
5303+ }
5304+ },
5305+ "node_modules/lightningcss-android-arm64": {
5306+ "version": "1.32.0",
5307+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
5308+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
5309+ "cpu": [
5310+ "arm64"
5311+ ],
5312+ "dev": true,
5313+ "license": "MPL-2.0",
5314+ "optional": true,
5315+ "os": [
5316+ "android"
5317+ ],
5318+ "engines": {
5319+ "node": ">= 12.0.0"
5320+ },
5321+ "funding": {
5322+ "type": "opencollective",
5323+ "url": "https://opencollective.com/parcel"
5324+ }
5325+ },
5326+ "node_modules/lightningcss-darwin-arm64": {
5327+ "version": "1.32.0",
5328+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
5329+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
5330+ "cpu": [
5331+ "arm64"
5332+ ],
5333+ "dev": true,
5334+ "license": "MPL-2.0",
5335+ "optional": true,
5336+ "os": [
5337+ "darwin"
5338+ ],
5339+ "engines": {
5340+ "node": ">= 12.0.0"
5341+ },
5342+ "funding": {
5343+ "type": "opencollective",
5344+ "url": "https://opencollective.com/parcel"
5345+ }
5346+ },
5347+ "node_modules/lightningcss-darwin-x64": {
5348+ "version": "1.32.0",
5349+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
5350+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
5351+ "cpu": [
5352+ "x64"
5353+ ],
5354+ "dev": true,
5355+ "license": "MPL-2.0",
5356+ "optional": true,
5357+ "os": [
5358+ "darwin"
5359+ ],
5360+ "engines": {
5361+ "node": ">= 12.0.0"
5362+ },
5363+ "funding": {
5364+ "type": "opencollective",
5365+ "url": "https://opencollective.com/parcel"
5366+ }
5367+ },
5368+ "node_modules/lightningcss-freebsd-x64": {
5369+ "version": "1.32.0",
5370+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
5371+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
5372+ "cpu": [
5373+ "x64"
5374+ ],
5375+ "dev": true,
5376+ "license": "MPL-2.0",
5377+ "optional": true,
5378+ "os": [
5379+ "freebsd"
5380+ ],
5381+ "engines": {
5382+ "node": ">= 12.0.0"
5383+ },
5384+ "funding": {
5385+ "type": "opencollective",
5386+ "url": "https://opencollective.com/parcel"
5387+ }
5388+ },
5389+ "node_modules/lightningcss-linux-arm-gnueabihf": {
5390+ "version": "1.32.0",
5391+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
5392+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
5393+ "cpu": [
5394+ "arm"
5395+ ],
5396+ "dev": true,
5397+ "license": "MPL-2.0",
5398+ "optional": true,
5399+ "os": [
5400+ "linux"
5401+ ],
5402+ "engines": {
5403+ "node": ">= 12.0.0"
5404+ },
5405+ "funding": {
5406+ "type": "opencollective",
5407+ "url": "https://opencollective.com/parcel"
5408+ }
5409+ },
5410+ "node_modules/lightningcss-linux-arm64-gnu": {
5411+ "version": "1.32.0",
5412+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
5413+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
5414+ "cpu": [
5415+ "arm64"
5416+ ],
5417+ "dev": true,
5418+ "libc": [
5419+ "glibc"
5420+ ],
5421+ "license": "MPL-2.0",
5422+ "optional": true,
5423+ "os": [
5424+ "linux"
5425+ ],
5426+ "engines": {
5427+ "node": ">= 12.0.0"
5428+ },
5429+ "funding": {
5430+ "type": "opencollective",
5431+ "url": "https://opencollective.com/parcel"
5432+ }
5433+ },
5434+ "node_modules/lightningcss-linux-arm64-musl": {
5435+ "version": "1.32.0",
5436+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
5437+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
5438+ "cpu": [
5439+ "arm64"
5440+ ],
5441+ "dev": true,
5442+ "libc": [
5443+ "musl"
5444+ ],
5445+ "license": "MPL-2.0",
5446+ "optional": true,
5447+ "os": [
5448+ "linux"
5449+ ],
5450+ "engines": {
5451+ "node": ">= 12.0.0"
5452+ },
5453+ "funding": {
5454+ "type": "opencollective",
5455+ "url": "https://opencollective.com/parcel"
5456+ }
5457+ },
5458+ "node_modules/lightningcss-linux-x64-gnu": {
5459+ "version": "1.32.0",
5460+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
5461+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
5462+ "cpu": [
5463+ "x64"
5464+ ],
5465+ "dev": true,
5466+ "libc": [
5467+ "glibc"
5468+ ],
5469+ "license": "MPL-2.0",
5470+ "optional": true,
5471+ "os": [
5472+ "linux"
5473+ ],
5474+ "engines": {
5475+ "node": ">= 12.0.0"
5476+ },
5477+ "funding": {
5478+ "type": "opencollective",
5479+ "url": "https://opencollective.com/parcel"
5480+ }
5481+ },
5482+ "node_modules/lightningcss-linux-x64-musl": {
5483+ "version": "1.32.0",
5484+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
5485+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
5486+ "cpu": [
5487+ "x64"
5488+ ],
5489+ "dev": true,
5490+ "libc": [
5491+ "musl"
5492+ ],
5493+ "license": "MPL-2.0",
5494+ "optional": true,
5495+ "os": [
5496+ "linux"
5497+ ],
5498+ "engines": {
5499+ "node": ">= 12.0.0"
5500+ },
5501+ "funding": {
5502+ "type": "opencollective",
5503+ "url": "https://opencollective.com/parcel"
5504+ }
5505+ },
5506+ "node_modules/lightningcss-win32-arm64-msvc": {
5507+ "version": "1.32.0",
5508+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
5509+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
5510+ "cpu": [
5511+ "arm64"
5512+ ],
5513+ "dev": true,
5514+ "license": "MPL-2.0",
5515+ "optional": true,
5516+ "os": [
5517+ "win32"
5518+ ],
5519+ "engines": {
5520+ "node": ">= 12.0.0"
5521+ },
5522+ "funding": {
5523+ "type": "opencollective",
5524+ "url": "https://opencollective.com/parcel"
5525+ }
5526+ },
5527+ "node_modules/lightningcss-win32-x64-msvc": {
5528+ "version": "1.32.0",
5529+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
5530+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
5531+ "cpu": [
5532+ "x64"
5533+ ],
5534+ "dev": true,
5535+ "license": "MPL-2.0",
5536+ "optional": true,
5537+ "os": [
5538+ "win32"
5539+ ],
5540+ "engines": {
5541+ "node": ">= 12.0.0"
5542+ },
5543+ "funding": {
5544+ "type": "opencollective",
5545+ "url": "https://opencollective.com/parcel"
5546+ }
5547+ },
5548+ "node_modules/locate-path": {
5549+ "version": "6.0.0",
5550+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
5551+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
5552+ "dev": true,
5553+ "license": "MIT",
5554+ "dependencies": {
5555+ "p-locate": "^5.0.0"
5556+ },
5557+ "engines": {
5558+ "node": ">=10"
5559+ },
5560+ "funding": {
5561+ "url": "https://github.com/sponsors/sindresorhus"
5562+ }
5563+ },
5564+ "node_modules/lodash.merge": {
5565+ "version": "4.6.2",
5566+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
5567+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
5568+ "dev": true,
5569+ "license": "MIT"
5570+ },
5571+ "node_modules/loose-envify": {
5572+ "version": "1.4.0",
5573+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
5574+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
5575+ "dev": true,
5576+ "license": "MIT",
5577+ "dependencies": {
5578+ "js-tokens": "^3.0.0 || ^4.0.0"
5579+ },
5580+ "bin": {
5581+ "loose-envify": "cli.js"
5582+ }
5583+ },
5584+ "node_modules/lru-cache": {
5585+ "version": "5.1.1",
5586+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
5587+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
5588+ "dev": true,
5589+ "license": "ISC",
5590+ "dependencies": {
5591+ "yallist": "^3.0.2"
5592+ }
5593+ },
5594+ "node_modules/magic-string": {
5595+ "version": "0.30.21",
5596+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
5597+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
5598+ "dev": true,
5599+ "license": "MIT",
5600+ "dependencies": {
5601+ "@jridgewell/sourcemap-codec": "^1.5.5"
5602+ }
5603+ },
5604+ "node_modules/math-intrinsics": {
5605+ "version": "1.1.0",
5606+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
5607+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
5608+ "dev": true,
5609+ "license": "MIT",
5610+ "engines": {
5611+ "node": ">= 0.4"
5612+ }
5613+ },
5614+ "node_modules/merge2": {
5615+ "version": "1.4.1",
5616+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
5617+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
5618+ "dev": true,
5619+ "license": "MIT",
5620+ "engines": {
5621+ "node": ">= 8"
5622+ }
5623+ },
5624+ "node_modules/micromatch": {
5625+ "version": "4.0.8",
5626+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
5627+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
5628+ "dev": true,
5629+ "license": "MIT",
5630+ "dependencies": {
5631+ "braces": "^3.0.3",
5632+ "picomatch": "^2.3.1"
5633+ },
5634+ "engines": {
5635+ "node": ">=8.6"
5636+ }
5637+ },
5638+ "node_modules/minimatch": {
5639+ "version": "3.1.5",
5640+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
5641+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
5642+ "dev": true,
5643+ "license": "ISC",
5644+ "dependencies": {
5645+ "brace-expansion": "^1.1.7"
5646+ },
5647+ "engines": {
5648+ "node": "*"
5649+ }
5650+ },
5651+ "node_modules/minimist": {
5652+ "version": "1.2.8",
5653+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
5654+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
5655+ "dev": true,
5656+ "license": "MIT",
5657+ "funding": {
5658+ "url": "https://github.com/sponsors/ljharb"
5659+ }
5660+ },
5661+ "node_modules/ms": {
5662+ "version": "2.1.3",
5663+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
5664+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
5665+ "dev": true,
5666+ "license": "MIT"
5667+ },
5668+ "node_modules/nanoid": {
5669+ "version": "3.3.17",
5670+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz",
5671+ "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==",
5672+ "funding": [
5673+ {
5674+ "type": "github",
5675+ "url": "https://github.com/sponsors/ai"
5676+ }
5677+ ],
5678+ "license": "MIT",
5679+ "bin": {
5680+ "nanoid": "bin/nanoid.cjs"
5681+ },
5682+ "engines": {
5683+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
5684+ }
5685+ },
5686+ "node_modules/napi-postinstall": {
5687+ "version": "0.3.4",
5688+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
5689+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
5690+ "dev": true,
5691+ "license": "MIT",
5692+ "bin": {
5693+ "napi-postinstall": "lib/cli.js"
5694+ },
5695+ "engines": {
5696+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
5697+ },
5698+ "funding": {
5699+ "url": "https://opencollective.com/napi-postinstall"
5700+ }
5701+ },
5702+ "node_modules/natural-compare": {
5703+ "version": "1.4.0",
5704+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
5705+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
5706+ "dev": true,
5707+ "license": "MIT"
5708+ },
5709+ "node_modules/next": {
5710+ "version": "16.2.12",
5711+ "resolved": "https://registry.npmjs.org/next/-/next-16.2.12.tgz",
5712+ "integrity": "sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==",
5713+ "license": "MIT",
5714+ "dependencies": {
5715+ "@next/env": "16.2.12",
5716+ "@swc/helpers": "0.5.15",
5717+ "baseline-browser-mapping": "^2.9.19",
5718+ "caniuse-lite": "^1.0.30001579",
5719+ "postcss": "8.4.31",
5720+ "styled-jsx": "5.1.6"
5721+ },
5722+ "bin": {
5723+ "next": "dist/bin/next"
5724+ },
5725+ "engines": {
5726+ "node": ">=20.9.0"
5727+ },
5728+ "optionalDependencies": {
5729+ "@next/swc-darwin-arm64": "16.2.12",
5730+ "@next/swc-darwin-x64": "16.2.12",
5731+ "@next/swc-linux-arm64-gnu": "16.2.12",
5732+ "@next/swc-linux-arm64-musl": "16.2.12",
5733+ "@next/swc-linux-x64-gnu": "16.2.12",
5734+ "@next/swc-linux-x64-musl": "16.2.12",
5735+ "@next/swc-win32-arm64-msvc": "16.2.12",
5736+ "@next/swc-win32-x64-msvc": "16.2.12",
5737+ "sharp": "^0.34.5"
5738+ },
5739+ "peerDependencies": {
5740+ "@opentelemetry/api": "^1.1.0",
5741+ "@playwright/test": "^1.51.1",
5742+ "babel-plugin-react-compiler": "*",
5743+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
5744+ "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
5745+ "sass": "^1.3.0"
5746+ },
5747+ "peerDependenciesMeta": {
5748+ "@opentelemetry/api": {
5749+ "optional": true
5750+ },
5751+ "@playwright/test": {
5752+ "optional": true
5753+ },
5754+ "babel-plugin-react-compiler": {
5755+ "optional": true
5756+ },
5757+ "sass": {
5758+ "optional": true
5759+ }
5760+ }
5761+ },
5762+ "node_modules/next/node_modules/postcss": {
5763+ "version": "8.4.31",
5764+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
5765+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
5766+ "funding": [
5767+ {
5768+ "type": "opencollective",
5769+ "url": "https://opencollective.com/postcss/"
5770+ },
5771+ {
5772+ "type": "tidelift",
5773+ "url": "https://tidelift.com/funding/github/npm/postcss"
5774+ },
5775+ {
5776+ "type": "github",
5777+ "url": "https://github.com/sponsors/ai"
5778+ }
5779+ ],
5780+ "license": "MIT",
5781+ "dependencies": {
5782+ "nanoid": "^3.3.6",
5783+ "picocolors": "^1.0.0",
5784+ "source-map-js": "^1.0.2"
5785+ },
5786+ "engines": {
5787+ "node": "^10 || ^12 || >=14"
5788+ }
5789+ },
5790+ "node_modules/node-exports-info": {
5791+ "version": "1.6.2",
5792+ "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz",
5793+ "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==",
5794+ "dev": true,
5795+ "license": "MIT",
5796+ "dependencies": {
5797+ "array.prototype.flatmap": "^1.3.3",
5798+ "es-errors": "^1.3.0",
5799+ "object.entries": "^1.1.9",
5800+ "semver": "^6.3.1"
5801+ },
5802+ "engines": {
5803+ "node": ">= 0.4"
5804+ },
5805+ "funding": {
5806+ "url": "https://github.com/sponsors/ljharb"
5807+ }
5808+ },
5809+ "node_modules/node-releases": {
5810+ "version": "2.0.51",
5811+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz",
5812+ "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==",
5813+ "dev": true,
5814+ "license": "MIT",
5815+ "engines": {
5816+ "node": ">=18"
5817+ }
5818+ },
5819+ "node_modules/object-assign": {
5820+ "version": "4.1.1",
5821+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
5822+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
5823+ "dev": true,
5824+ "license": "MIT",
5825+ "engines": {
5826+ "node": ">=0.10.0"
5827+ }
5828+ },
5829+ "node_modules/object-inspect": {
5830+ "version": "1.13.4",
5831+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
5832+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
5833+ "dev": true,
5834+ "license": "MIT",
5835+ "engines": {
5836+ "node": ">= 0.4"
5837+ },
5838+ "funding": {
5839+ "url": "https://github.com/sponsors/ljharb"
5840+ }
5841+ },
5842+ "node_modules/object-keys": {
5843+ "version": "1.1.1",
5844+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
5845+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
5846+ "dev": true,
5847+ "license": "MIT",
5848+ "engines": {
5849+ "node": ">= 0.4"
5850+ }
5851+ },
5852+ "node_modules/object.assign": {
5853+ "version": "4.1.7",
5854+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
5855+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
5856+ "dev": true,
5857+ "license": "MIT",
5858+ "dependencies": {
5859+ "call-bind": "^1.0.8",
5860+ "call-bound": "^1.0.3",
5861+ "define-properties": "^1.2.1",
5862+ "es-object-atoms": "^1.0.0",
5863+ "has-symbols": "^1.1.0",
5864+ "object-keys": "^1.1.1"
5865+ },
5866+ "engines": {
5867+ "node": ">= 0.4"
5868+ },
5869+ "funding": {
5870+ "url": "https://github.com/sponsors/ljharb"
5871+ }
5872+ },
5873+ "node_modules/object.entries": {
5874+ "version": "1.1.9",
5875+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
5876+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
5877+ "dev": true,
5878+ "license": "MIT",
5879+ "dependencies": {
5880+ "call-bind": "^1.0.8",
5881+ "call-bound": "^1.0.4",
5882+ "define-properties": "^1.2.1",
5883+ "es-object-atoms": "^1.1.1"
5884+ },
5885+ "engines": {
5886+ "node": ">= 0.4"
5887+ }
5888+ },
5889+ "node_modules/object.fromentries": {
5890+ "version": "2.0.8",
5891+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
5892+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
5893+ "dev": true,
5894+ "license": "MIT",
5895+ "dependencies": {
5896+ "call-bind": "^1.0.7",
5897+ "define-properties": "^1.2.1",
5898+ "es-abstract": "^1.23.2",
5899+ "es-object-atoms": "^1.0.0"
5900+ },
5901+ "engines": {
5902+ "node": ">= 0.4"
5903+ },
5904+ "funding": {
5905+ "url": "https://github.com/sponsors/ljharb"
5906+ }
5907+ },
5908+ "node_modules/object.groupby": {
5909+ "version": "1.0.3",
5910+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
5911+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
5912+ "dev": true,
5913+ "license": "MIT",
5914+ "dependencies": {
5915+ "call-bind": "^1.0.7",
5916+ "define-properties": "^1.2.1",
5917+ "es-abstract": "^1.23.2"
5918+ },
5919+ "engines": {
5920+ "node": ">= 0.4"
5921+ }
5922+ },
5923+ "node_modules/object.values": {
5924+ "version": "1.2.1",
5925+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
5926+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
5927+ "dev": true,
5928+ "license": "MIT",
5929+ "dependencies": {
5930+ "call-bind": "^1.0.8",
5931+ "call-bound": "^1.0.3",
5932+ "define-properties": "^1.2.1",
5933+ "es-object-atoms": "^1.0.0"
5934+ },
5935+ "engines": {
5936+ "node": ">= 0.4"
5937+ },
5938+ "funding": {
5939+ "url": "https://github.com/sponsors/ljharb"
5940+ }
5941+ },
5942+ "node_modules/optionator": {
5943+ "version": "0.9.4",
5944+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
5945+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
5946+ "dev": true,
5947+ "license": "MIT",
5948+ "dependencies": {
5949+ "deep-is": "^0.1.3",
5950+ "fast-levenshtein": "^2.0.6",
5951+ "levn": "^0.4.1",
5952+ "prelude-ls": "^1.2.1",
5953+ "type-check": "^0.4.0",
5954+ "word-wrap": "^1.2.5"
5955+ },
5956+ "engines": {
5957+ "node": ">= 0.8.0"
5958+ }
5959+ },
5960+ "node_modules/own-keys": {
5961+ "version": "1.0.2",
5962+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz",
5963+ "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==",
5964+ "dev": true,
5965+ "license": "MIT",
5966+ "dependencies": {
5967+ "call-bound": "^1.0.4",
5968+ "get-intrinsic": "^1.3.0",
5969+ "object-keys": "^1.1.1",
5970+ "safe-push-apply": "^1.0.0"
5971+ },
5972+ "engines": {
5973+ "node": ">= 0.4"
5974+ },
5975+ "funding": {
5976+ "url": "https://github.com/sponsors/ljharb"
5977+ }
5978+ },
5979+ "node_modules/p-limit": {
5980+ "version": "3.1.0",
5981+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
5982+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
5983+ "dev": true,
5984+ "license": "MIT",
5985+ "dependencies": {
5986+ "yocto-queue": "^0.1.0"
5987+ },
5988+ "engines": {
5989+ "node": ">=10"
5990+ },
5991+ "funding": {
5992+ "url": "https://github.com/sponsors/sindresorhus"
5993+ }
5994+ },
5995+ "node_modules/p-locate": {
5996+ "version": "5.0.0",
5997+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
5998+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
5999+ "dev": true,
6000+ "license": "MIT",
6001+ "dependencies": {
6002+ "p-limit": "^3.0.2"
6003+ },
6004+ "engines": {
6005+ "node": ">=10"
6006+ },
6007+ "funding": {
6008+ "url": "https://github.com/sponsors/sindresorhus"
6009+ }
6010+ },
6011+ "node_modules/parent-module": {
6012+ "version": "1.0.1",
6013+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
6014+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
6015+ "dev": true,
6016+ "license": "MIT",
6017+ "dependencies": {
6018+ "callsites": "^3.0.0"
6019+ },
6020+ "engines": {
6021+ "node": ">=6"
6022+ }
6023+ },
6024+ "node_modules/path-exists": {
6025+ "version": "4.0.0",
6026+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
6027+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
6028+ "dev": true,
6029+ "license": "MIT",
6030+ "engines": {
6031+ "node": ">=8"
6032+ }
6033+ },
6034+ "node_modules/path-key": {
6035+ "version": "3.1.1",
6036+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
6037+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
6038+ "dev": true,
6039+ "license": "MIT",
6040+ "engines": {
6041+ "node": ">=8"
6042+ }
6043+ },
6044+ "node_modules/path-parse": {
6045+ "version": "1.0.7",
6046+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
6047+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
6048+ "dev": true,
6049+ "license": "MIT"
6050+ },
6051+ "node_modules/picocolors": {
6052+ "version": "1.1.1",
6053+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
6054+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
6055+ "license": "ISC"
6056+ },
6057+ "node_modules/picomatch": {
6058+ "version": "2.3.2",
6059+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
6060+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
6061+ "dev": true,
6062+ "license": "MIT",
6063+ "engines": {
6064+ "node": ">=8.6"
6065+ },
6066+ "funding": {
6067+ "url": "https://github.com/sponsors/jonschlinkert"
6068+ }
6069+ },
6070+ "node_modules/possible-typed-array-names": {
6071+ "version": "1.1.0",
6072+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
6073+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
6074+ "dev": true,
6075+ "license": "MIT",
6076+ "engines": {
6077+ "node": ">= 0.4"
6078+ }
6079+ },
6080+ "node_modules/postcss": {
6081+ "version": "8.5.25",
6082+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz",
6083+ "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==",
6084+ "dev": true,
6085+ "funding": [
6086+ {
6087+ "type": "opencollective",
6088+ "url": "https://opencollective.com/postcss/"
6089+ },
6090+ {
6091+ "type": "tidelift",
6092+ "url": "https://tidelift.com/funding/github/npm/postcss"
6093+ },
6094+ {
6095+ "type": "github",
6096+ "url": "https://github.com/sponsors/ai"
6097+ }
6098+ ],
6099+ "license": "MIT",
6100+ "dependencies": {
6101+ "nanoid": "^3.3.16",
6102+ "picocolors": "^1.1.1",
6103+ "source-map-js": "^1.2.1"
6104+ },
6105+ "engines": {
6106+ "node": "^10 || ^12 || >=14"
6107+ }
6108+ },
6109+ "node_modules/prelude-ls": {
6110+ "version": "1.2.1",
6111+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
6112+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
6113+ "dev": true,
6114+ "license": "MIT",
6115+ "engines": {
6116+ "node": ">= 0.8.0"
6117+ }
6118+ },
6119+ "node_modules/prop-types": {
6120+ "version": "15.8.1",
6121+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
6122+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
6123+ "dev": true,
6124+ "license": "MIT",
6125+ "dependencies": {
6126+ "loose-envify": "^1.4.0",
6127+ "object-assign": "^4.1.1",
6128+ "react-is": "^16.13.1"
6129+ }
6130+ },
6131+ "node_modules/punycode": {
6132+ "version": "2.3.1",
6133+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
6134+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
6135+ "dev": true,
6136+ "license": "MIT",
6137+ "engines": {
6138+ "node": ">=6"
6139+ }
6140+ },
6141+ "node_modules/queue-microtask": {
6142+ "version": "1.2.3",
6143+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
6144+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
6145+ "dev": true,
6146+ "funding": [
6147+ {
6148+ "type": "github",
6149+ "url": "https://github.com/sponsors/feross"
6150+ },
6151+ {
6152+ "type": "patreon",
6153+ "url": "https://www.patreon.com/feross"
6154+ },
6155+ {
6156+ "type": "consulting",
6157+ "url": "https://feross.org/support"
6158+ }
6159+ ],
6160+ "license": "MIT"
6161+ },
6162+ "node_modules/react": {
6163+ "version": "19.2.8",
6164+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz",
6165+ "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
6166+ "license": "MIT",
6167+ "engines": {
6168+ "node": ">=0.10.0"
6169+ }
6170+ },
6171+ "node_modules/react-dom": {
6172+ "version": "19.2.8",
6173+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz",
6174+ "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==",
6175+ "license": "MIT",
6176+ "dependencies": {
6177+ "scheduler": "^0.27.0"
6178+ },
6179+ "peerDependencies": {
6180+ "react": "^19.2.8"
6181+ }
6182+ },
6183+ "node_modules/react-is": {
6184+ "version": "16.13.1",
6185+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
6186+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
6187+ "dev": true,
6188+ "license": "MIT"
6189+ },
6190+ "node_modules/reflect.getprototypeof": {
6191+ "version": "1.0.10",
6192+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
6193+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
6194+ "dev": true,
6195+ "license": "MIT",
6196+ "dependencies": {
6197+ "call-bind": "^1.0.8",
6198+ "define-properties": "^1.2.1",
6199+ "es-abstract": "^1.23.9",
6200+ "es-errors": "^1.3.0",
6201+ "es-object-atoms": "^1.0.0",
6202+ "get-intrinsic": "^1.2.7",
6203+ "get-proto": "^1.0.1",
6204+ "which-builtin-type": "^1.2.1"
6205+ },
6206+ "engines": {
6207+ "node": ">= 0.4"
6208+ },
6209+ "funding": {
6210+ "url": "https://github.com/sponsors/ljharb"
6211+ }
6212+ },
6213+ "node_modules/regexp.prototype.flags": {
6214+ "version": "1.5.4",
6215+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
6216+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
6217+ "dev": true,
6218+ "license": "MIT",
6219+ "dependencies": {
6220+ "call-bind": "^1.0.8",
6221+ "define-properties": "^1.2.1",
6222+ "es-errors": "^1.3.0",
6223+ "get-proto": "^1.0.1",
6224+ "gopd": "^1.2.0",
6225+ "set-function-name": "^2.0.2"
6226+ },
6227+ "engines": {
6228+ "node": ">= 0.4"
6229+ },
6230+ "funding": {
6231+ "url": "https://github.com/sponsors/ljharb"
6232+ }
6233+ },
6234+ "node_modules/resolve": {
6235+ "version": "2.0.0-next.7",
6236+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz",
6237+ "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==",
6238+ "dev": true,
6239+ "license": "MIT",
6240+ "dependencies": {
6241+ "es-errors": "^1.3.0",
6242+ "is-core-module": "^2.16.2",
6243+ "node-exports-info": "^1.6.0",
6244+ "object-keys": "^1.1.1",
6245+ "path-parse": "^1.0.7",
6246+ "supports-preserve-symlinks-flag": "^1.0.0"
6247+ },
6248+ "bin": {
6249+ "resolve": "bin/resolve"
6250+ },
6251+ "engines": {
6252+ "node": ">= 0.4"
6253+ },
6254+ "funding": {
6255+ "url": "https://github.com/sponsors/ljharb"
6256+ }
6257+ },
6258+ "node_modules/resolve-from": {
6259+ "version": "4.0.0",
6260+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
6261+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
6262+ "dev": true,
6263+ "license": "MIT",
6264+ "engines": {
6265+ "node": ">=4"
6266+ }
6267+ },
6268+ "node_modules/resolve-pkg-maps": {
6269+ "version": "1.0.0",
6270+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
6271+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
6272+ "dev": true,
6273+ "license": "MIT",
6274+ "funding": {
6275+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
6276+ }
6277+ },
6278+ "node_modules/reusify": {
6279+ "version": "1.1.0",
6280+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
6281+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
6282+ "dev": true,
6283+ "license": "MIT",
6284+ "engines": {
6285+ "iojs": ">=1.0.0",
6286+ "node": ">=0.10.0"
6287+ }
6288+ },
6289+ "node_modules/run-parallel": {
6290+ "version": "1.2.0",
6291+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
6292+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
6293+ "dev": true,
6294+ "funding": [
6295+ {
6296+ "type": "github",
6297+ "url": "https://github.com/sponsors/feross"
6298+ },
6299+ {
6300+ "type": "patreon",
6301+ "url": "https://www.patreon.com/feross"
6302+ },
6303+ {
6304+ "type": "consulting",
6305+ "url": "https://feross.org/support"
6306+ }
6307+ ],
6308+ "license": "MIT",
6309+ "dependencies": {
6310+ "queue-microtask": "^1.2.2"
6311+ }
6312+ },
6313+ "node_modules/safe-array-concat": {
6314+ "version": "1.1.4",
6315+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz",
6316+ "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==",
6317+ "dev": true,
6318+ "license": "MIT",
6319+ "dependencies": {
6320+ "call-bind": "^1.0.9",
6321+ "call-bound": "^1.0.4",
6322+ "get-intrinsic": "^1.3.0",
6323+ "has-symbols": "^1.1.0",
6324+ "isarray": "^2.0.5"
6325+ },
6326+ "engines": {
6327+ "node": ">=0.4"
6328+ },
6329+ "funding": {
6330+ "url": "https://github.com/sponsors/ljharb"
6331+ }
6332+ },
6333+ "node_modules/safe-push-apply": {
6334+ "version": "1.0.0",
6335+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
6336+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
6337+ "dev": true,
6338+ "license": "MIT",
6339+ "dependencies": {
6340+ "es-errors": "^1.3.0",
6341+ "isarray": "^2.0.5"
6342+ },
6343+ "engines": {
6344+ "node": ">= 0.4"
6345+ },
6346+ "funding": {
6347+ "url": "https://github.com/sponsors/ljharb"
6348+ }
6349+ },
6350+ "node_modules/safe-regex-test": {
6351+ "version": "1.1.0",
6352+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
6353+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
6354+ "dev": true,
6355+ "license": "MIT",
6356+ "dependencies": {
6357+ "call-bound": "^1.0.2",
6358+ "es-errors": "^1.3.0",
6359+ "is-regex": "^1.2.1"
6360+ },
6361+ "engines": {
6362+ "node": ">= 0.4"
6363+ },
6364+ "funding": {
6365+ "url": "https://github.com/sponsors/ljharb"
6366+ }
6367+ },
6368+ "node_modules/scheduler": {
6369+ "version": "0.27.0",
6370+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
6371+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
6372+ "license": "MIT"
6373+ },
6374+ "node_modules/semver": {
6375+ "version": "6.3.1",
6376+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
6377+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
6378+ "dev": true,
6379+ "license": "ISC",
6380+ "bin": {
6381+ "semver": "bin/semver.js"
6382+ }
6383+ },
6384+ "node_modules/set-function-length": {
6385+ "version": "1.2.2",
6386+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
6387+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
6388+ "dev": true,
6389+ "license": "MIT",
6390+ "dependencies": {
6391+ "define-data-property": "^1.1.4",
6392+ "es-errors": "^1.3.0",
6393+ "function-bind": "^1.1.2",
6394+ "get-intrinsic": "^1.2.4",
6395+ "gopd": "^1.0.1",
6396+ "has-property-descriptors": "^1.0.2"
6397+ },
6398+ "engines": {
6399+ "node": ">= 0.4"
6400+ }
6401+ },
6402+ "node_modules/set-function-name": {
6403+ "version": "2.0.2",
6404+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
6405+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
6406+ "dev": true,
6407+ "license": "MIT",
6408+ "dependencies": {
6409+ "define-data-property": "^1.1.4",
6410+ "es-errors": "^1.3.0",
6411+ "functions-have-names": "^1.2.3",
6412+ "has-property-descriptors": "^1.0.2"
6413+ },
6414+ "engines": {
6415+ "node": ">= 0.4"
6416+ }
6417+ },
6418+ "node_modules/set-proto": {
6419+ "version": "1.0.0",
6420+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
6421+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
6422+ "dev": true,
6423+ "license": "MIT",
6424+ "dependencies": {
6425+ "dunder-proto": "^1.0.1",
6426+ "es-errors": "^1.3.0",
6427+ "es-object-atoms": "^1.0.0"
6428+ },
6429+ "engines": {
6430+ "node": ">= 0.4"
6431+ }
6432+ },
6433+ "node_modules/sharp": {
6434+ "version": "0.34.5",
6435+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
6436+ "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
6437+ "hasInstallScript": true,
6438+ "license": "Apache-2.0",
6439+ "optional": true,
6440+ "dependencies": {
6441+ "@img/colour": "^1.0.0",
6442+ "detect-libc": "^2.1.2",
6443+ "semver": "^7.7.3"
6444+ },
6445+ "engines": {
6446+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
6447+ },
6448+ "funding": {
6449+ "url": "https://opencollective.com/libvips"
6450+ },
6451+ "optionalDependencies": {
6452+ "@img/sharp-darwin-arm64": "0.34.5",
6453+ "@img/sharp-darwin-x64": "0.34.5",
6454+ "@img/sharp-libvips-darwin-arm64": "1.2.4",
6455+ "@img/sharp-libvips-darwin-x64": "1.2.4",
6456+ "@img/sharp-libvips-linux-arm": "1.2.4",
6457+ "@img/sharp-libvips-linux-arm64": "1.2.4",
6458+ "@img/sharp-libvips-linux-ppc64": "1.2.4",
6459+ "@img/sharp-libvips-linux-riscv64": "1.2.4",
6460+ "@img/sharp-libvips-linux-s390x": "1.2.4",
6461+ "@img/sharp-libvips-linux-x64": "1.2.4",
6462+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
6463+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
6464+ "@img/sharp-linux-arm": "0.34.5",
6465+ "@img/sharp-linux-arm64": "0.34.5",
6466+ "@img/sharp-linux-ppc64": "0.34.5",
6467+ "@img/sharp-linux-riscv64": "0.34.5",
6468+ "@img/sharp-linux-s390x": "0.34.5",
6469+ "@img/sharp-linux-x64": "0.34.5",
6470+ "@img/sharp-linuxmusl-arm64": "0.34.5",
6471+ "@img/sharp-linuxmusl-x64": "0.34.5",
6472+ "@img/sharp-wasm32": "0.34.5",
6473+ "@img/sharp-win32-arm64": "0.34.5",
6474+ "@img/sharp-win32-ia32": "0.34.5",
6475+ "@img/sharp-win32-x64": "0.34.5"
6476+ }
6477+ },
6478+ "node_modules/sharp/node_modules/semver": {
6479+ "version": "7.8.5",
6480+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
6481+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
6482+ "license": "ISC",
6483+ "optional": true,
6484+ "bin": {
6485+ "semver": "bin/semver.js"
6486+ },
6487+ "engines": {
6488+ "node": ">=10"
6489+ }
6490+ },
6491+ "node_modules/shebang-command": {
6492+ "version": "2.0.0",
6493+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
6494+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
6495+ "dev": true,
6496+ "license": "MIT",
6497+ "dependencies": {
6498+ "shebang-regex": "^3.0.0"
6499+ },
6500+ "engines": {
6501+ "node": ">=8"
6502+ }
6503+ },
6504+ "node_modules/shebang-regex": {
6505+ "version": "3.0.0",
6506+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
6507+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
6508+ "dev": true,
6509+ "license": "MIT",
6510+ "engines": {
6511+ "node": ">=8"
6512+ }
6513+ },
6514+ "node_modules/side-channel": {
6515+ "version": "1.1.1",
6516+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
6517+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
6518+ "dev": true,
6519+ "license": "MIT",
6520+ "dependencies": {
6521+ "es-errors": "^1.3.0",
6522+ "object-inspect": "^1.13.4",
6523+ "side-channel-list": "^1.0.1",
6524+ "side-channel-map": "^1.0.1",
6525+ "side-channel-weakmap": "^1.0.2"
6526+ },
6527+ "engines": {
6528+ "node": ">= 0.4"
6529+ },
6530+ "funding": {
6531+ "url": "https://github.com/sponsors/ljharb"
6532+ }
6533+ },
6534+ "node_modules/side-channel-list": {
6535+ "version": "1.0.1",
6536+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
6537+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
6538+ "dev": true,
6539+ "license": "MIT",
6540+ "dependencies": {
6541+ "es-errors": "^1.3.0",
6542+ "object-inspect": "^1.13.4"
6543+ },
6544+ "engines": {
6545+ "node": ">= 0.4"
6546+ },
6547+ "funding": {
6548+ "url": "https://github.com/sponsors/ljharb"
6549+ }
6550+ },
6551+ "node_modules/side-channel-map": {
6552+ "version": "1.0.1",
6553+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
6554+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
6555+ "dev": true,
6556+ "license": "MIT",
6557+ "dependencies": {
6558+ "call-bound": "^1.0.2",
6559+ "es-errors": "^1.3.0",
6560+ "get-intrinsic": "^1.2.5",
6561+ "object-inspect": "^1.13.3"
6562+ },
6563+ "engines": {
6564+ "node": ">= 0.4"
6565+ },
6566+ "funding": {
6567+ "url": "https://github.com/sponsors/ljharb"
6568+ }
6569+ },
6570+ "node_modules/side-channel-weakmap": {
6571+ "version": "1.0.2",
6572+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
6573+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
6574+ "dev": true,
6575+ "license": "MIT",
6576+ "dependencies": {
6577+ "call-bound": "^1.0.2",
6578+ "es-errors": "^1.3.0",
6579+ "get-intrinsic": "^1.2.5",
6580+ "object-inspect": "^1.13.3",
6581+ "side-channel-map": "^1.0.1"
6582+ },
6583+ "engines": {
6584+ "node": ">= 0.4"
6585+ },
6586+ "funding": {
6587+ "url": "https://github.com/sponsors/ljharb"
6588+ }
6589+ },
6590+ "node_modules/source-map-js": {
6591+ "version": "1.2.1",
6592+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
6593+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
6594+ "license": "BSD-3-Clause",
6595+ "engines": {
6596+ "node": ">=0.10.0"
6597+ }
6598+ },
6599+ "node_modules/stable-hash": {
6600+ "version": "0.0.5",
6601+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
6602+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
6603+ "dev": true,
6604+ "license": "MIT"
6605+ },
6606+ "node_modules/stop-iteration-iterator": {
6607+ "version": "1.1.0",
6608+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
6609+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
6610+ "dev": true,
6611+ "license": "MIT",
6612+ "dependencies": {
6613+ "es-errors": "^1.3.0",
6614+ "internal-slot": "^1.1.0"
6615+ },
6616+ "engines": {
6617+ "node": ">= 0.4"
6618+ }
6619+ },
6620+ "node_modules/string.prototype.includes": {
6621+ "version": "2.0.1",
6622+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
6623+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
6624+ "dev": true,
6625+ "license": "MIT",
6626+ "dependencies": {
6627+ "call-bind": "^1.0.7",
6628+ "define-properties": "^1.2.1",
6629+ "es-abstract": "^1.23.3"
6630+ },
6631+ "engines": {
6632+ "node": ">= 0.4"
6633+ }
6634+ },
6635+ "node_modules/string.prototype.matchall": {
6636+ "version": "4.0.12",
6637+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
6638+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
6639+ "dev": true,
6640+ "license": "MIT",
6641+ "dependencies": {
6642+ "call-bind": "^1.0.8",
6643+ "call-bound": "^1.0.3",
6644+ "define-properties": "^1.2.1",
6645+ "es-abstract": "^1.23.6",
6646+ "es-errors": "^1.3.0",
6647+ "es-object-atoms": "^1.0.0",
6648+ "get-intrinsic": "^1.2.6",
6649+ "gopd": "^1.2.0",
6650+ "has-symbols": "^1.1.0",
6651+ "internal-slot": "^1.1.0",
6652+ "regexp.prototype.flags": "^1.5.3",
6653+ "set-function-name": "^2.0.2",
6654+ "side-channel": "^1.1.0"
6655+ },
6656+ "engines": {
6657+ "node": ">= 0.4"
6658+ },
6659+ "funding": {
6660+ "url": "https://github.com/sponsors/ljharb"
6661+ }
6662+ },
6663+ "node_modules/string.prototype.repeat": {
6664+ "version": "1.0.0",
6665+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
6666+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
6667+ "dev": true,
6668+ "license": "MIT",
6669+ "dependencies": {
6670+ "define-properties": "^1.1.3",
6671+ "es-abstract": "^1.17.5"
6672+ }
6673+ },
6674+ "node_modules/string.prototype.trim": {
6675+ "version": "1.2.11",
6676+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz",
6677+ "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==",
6678+ "dev": true,
6679+ "license": "MIT",
6680+ "dependencies": {
6681+ "call-bind": "^1.0.9",
6682+ "call-bound": "^1.0.4",
6683+ "define-data-property": "^1.1.4",
6684+ "define-properties": "^1.2.1",
6685+ "es-abstract": "^1.24.2",
6686+ "es-object-atoms": "^1.1.2",
6687+ "has-property-descriptors": "^1.0.2",
6688+ "safe-regex-test": "^1.1.0"
6689+ },
6690+ "engines": {
6691+ "node": ">= 0.4"
6692+ },
6693+ "funding": {
6694+ "url": "https://github.com/sponsors/ljharb"
6695+ }
6696+ },
6697+ "node_modules/string.prototype.trimend": {
6698+ "version": "1.0.10",
6699+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz",
6700+ "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==",
6701+ "dev": true,
6702+ "license": "MIT",
6703+ "dependencies": {
6704+ "call-bind": "^1.0.9",
6705+ "call-bound": "^1.0.4",
6706+ "define-properties": "^1.2.1",
6707+ "es-object-atoms": "^1.1.2"
6708+ },
6709+ "engines": {
6710+ "node": ">= 0.4"
6711+ },
6712+ "funding": {
6713+ "url": "https://github.com/sponsors/ljharb"
6714+ }
6715+ },
6716+ "node_modules/string.prototype.trimstart": {
6717+ "version": "1.0.8",
6718+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
6719+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
6720+ "dev": true,
6721+ "license": "MIT",
6722+ "dependencies": {
6723+ "call-bind": "^1.0.7",
6724+ "define-properties": "^1.2.1",
6725+ "es-object-atoms": "^1.0.0"
6726+ },
6727+ "engines": {
6728+ "node": ">= 0.4"
6729+ },
6730+ "funding": {
6731+ "url": "https://github.com/sponsors/ljharb"
6732+ }
6733+ },
6734+ "node_modules/strip-bom": {
6735+ "version": "3.0.0",
6736+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
6737+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
6738+ "dev": true,
6739+ "license": "MIT",
6740+ "engines": {
6741+ "node": ">=4"
6742+ }
6743+ },
6744+ "node_modules/strip-json-comments": {
6745+ "version": "3.1.1",
6746+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
6747+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
6748+ "dev": true,
6749+ "license": "MIT",
6750+ "engines": {
6751+ "node": ">=8"
6752+ },
6753+ "funding": {
6754+ "url": "https://github.com/sponsors/sindresorhus"
6755+ }
6756+ },
6757+ "node_modules/styled-jsx": {
6758+ "version": "5.1.6",
6759+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
6760+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
6761+ "license": "MIT",
6762+ "dependencies": {
6763+ "client-only": "0.0.1"
6764+ },
6765+ "engines": {
6766+ "node": ">= 12.0.0"
6767+ },
6768+ "peerDependencies": {
6769+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
6770+ },
6771+ "peerDependenciesMeta": {
6772+ "@babel/core": {
6773+ "optional": true
6774+ },
6775+ "babel-plugin-macros": {
6776+ "optional": true
6777+ }
6778+ }
6779+ },
6780+ "node_modules/supports-color": {
6781+ "version": "7.2.0",
6782+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
6783+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
6784+ "dev": true,
6785+ "license": "MIT",
6786+ "dependencies": {
6787+ "has-flag": "^4.0.0"
6788+ },
6789+ "engines": {
6790+ "node": ">=8"
6791+ }
6792+ },
6793+ "node_modules/supports-preserve-symlinks-flag": {
6794+ "version": "1.0.0",
6795+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
6796+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
6797+ "dev": true,
6798+ "license": "MIT",
6799+ "engines": {
6800+ "node": ">= 0.4"
6801+ },
6802+ "funding": {
6803+ "url": "https://github.com/sponsors/ljharb"
6804+ }
6805+ },
6806+ "node_modules/tailwindcss": {
6807+ "version": "4.3.3",
6808+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz",
6809+ "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==",
6810+ "dev": true,
6811+ "license": "MIT"
6812+ },
6813+ "node_modules/tapable": {
6814+ "version": "2.3.3",
6815+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
6816+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
6817+ "dev": true,
6818+ "license": "MIT",
6819+ "engines": {
6820+ "node": ">=6"
6821+ },
6822+ "funding": {
6823+ "type": "opencollective",
6824+ "url": "https://opencollective.com/webpack"
6825+ }
6826+ },
6827+ "node_modules/tinyglobby": {
6828+ "version": "0.2.17",
6829+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
6830+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
6831+ "dev": true,
6832+ "license": "MIT",
6833+ "dependencies": {
6834+ "fdir": "^6.5.0",
6835+ "picomatch": "^4.0.4"
6836+ },
6837+ "engines": {
6838+ "node": ">=12.0.0"
6839+ },
6840+ "funding": {
6841+ "url": "https://github.com/sponsors/SuperchupuDev"
6842+ }
6843+ },
6844+ "node_modules/tinyglobby/node_modules/fdir": {
6845+ "version": "6.5.0",
6846+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
6847+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
6848+ "dev": true,
6849+ "license": "MIT",
6850+ "engines": {
6851+ "node": ">=12.0.0"
6852+ },
6853+ "peerDependencies": {
6854+ "picomatch": "^3 || ^4"
6855+ },
6856+ "peerDependenciesMeta": {
6857+ "picomatch": {
6858+ "optional": true
6859+ }
6860+ }
6861+ },
6862+ "node_modules/tinyglobby/node_modules/picomatch": {
6863+ "version": "4.0.5",
6864+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
6865+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
6866+ "dev": true,
6867+ "license": "MIT",
6868+ "engines": {
6869+ "node": ">=12"
6870+ },
6871+ "funding": {
6872+ "url": "https://github.com/sponsors/jonschlinkert"
6873+ }
6874+ },
6875+ "node_modules/to-regex-range": {
6876+ "version": "5.0.1",
6877+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
6878+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
6879+ "dev": true,
6880+ "license": "MIT",
6881+ "dependencies": {
6882+ "is-number": "^7.0.0"
6883+ },
6884+ "engines": {
6885+ "node": ">=8.0"
6886+ }
6887+ },
6888+ "node_modules/ts-api-utils": {
6889+ "version": "2.5.0",
6890+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
6891+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
6892+ "dev": true,
6893+ "license": "MIT",
6894+ "engines": {
6895+ "node": ">=18.12"
6896+ },
6897+ "peerDependencies": {
6898+ "typescript": ">=4.8.4"
6899+ }
6900+ },
6901+ "node_modules/tsconfig-paths": {
6902+ "version": "3.15.0",
6903+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
6904+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
6905+ "dev": true,
6906+ "license": "MIT",
6907+ "dependencies": {
6908+ "@types/json5": "^0.0.29",
6909+ "json5": "^1.0.2",
6910+ "minimist": "^1.2.6",
6911+ "strip-bom": "^3.0.0"
6912+ }
6913+ },
6914+ "node_modules/tsconfig-paths/node_modules/json5": {
6915+ "version": "1.0.2",
6916+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
6917+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
6918+ "dev": true,
6919+ "license": "MIT",
6920+ "dependencies": {
6921+ "minimist": "^1.2.0"
6922+ },
6923+ "bin": {
6924+ "json5": "lib/cli.js"
6925+ }
6926+ },
6927+ "node_modules/tslib": {
6928+ "version": "2.8.1",
6929+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
6930+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
6931+ "license": "0BSD"
6932+ },
6933+ "node_modules/tsx": {
6934+ "version": "4.23.5",
6935+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.5.tgz",
6936+ "integrity": "sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==",
6937+ "dev": true,
6938+ "license": "MIT",
6939+ "dependencies": {
6940+ "esbuild": "~0.28.0"
6941+ },
6942+ "bin": {
6943+ "tsx": "dist/cli.mjs"
6944+ },
6945+ "engines": {
6946+ "node": ">=18.0.0"
6947+ },
6948+ "optionalDependencies": {
6949+ "fsevents": "~2.3.3"
6950+ }
6951+ },
6952+ "node_modules/type-check": {
6953+ "version": "0.4.0",
6954+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
6955+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
6956+ "dev": true,
6957+ "license": "MIT",
6958+ "dependencies": {
6959+ "prelude-ls": "^1.2.1"
6960+ },
6961+ "engines": {
6962+ "node": ">= 0.8.0"
6963+ }
6964+ },
6965+ "node_modules/typed-array-buffer": {
6966+ "version": "1.0.3",
6967+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
6968+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
6969+ "dev": true,
6970+ "license": "MIT",
6971+ "dependencies": {
6972+ "call-bound": "^1.0.3",
6973+ "es-errors": "^1.3.0",
6974+ "is-typed-array": "^1.1.14"
6975+ },
6976+ "engines": {
6977+ "node": ">= 0.4"
6978+ }
6979+ },
6980+ "node_modules/typed-array-byte-length": {
6981+ "version": "1.0.3",
6982+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
6983+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
6984+ "dev": true,
6985+ "license": "MIT",
6986+ "dependencies": {
6987+ "call-bind": "^1.0.8",
6988+ "for-each": "^0.3.3",
6989+ "gopd": "^1.2.0",
6990+ "has-proto": "^1.2.0",
6991+ "is-typed-array": "^1.1.14"
6992+ },
6993+ "engines": {
6994+ "node": ">= 0.4"
6995+ },
6996+ "funding": {
6997+ "url": "https://github.com/sponsors/ljharb"
6998+ }
6999+ },
7000+ "node_modules/typed-array-byte-offset": {
7001+ "version": "1.0.4",
7002+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
7003+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
7004+ "dev": true,
7005+ "license": "MIT",
7006+ "dependencies": {
7007+ "available-typed-arrays": "^1.0.7",
7008+ "call-bind": "^1.0.8",
7009+ "for-each": "^0.3.3",
7010+ "gopd": "^1.2.0",
7011+ "has-proto": "^1.2.0",
7012+ "is-typed-array": "^1.1.15",
7013+ "reflect.getprototypeof": "^1.0.9"
7014+ },
7015+ "engines": {
7016+ "node": ">= 0.4"
7017+ },
7018+ "funding": {
7019+ "url": "https://github.com/sponsors/ljharb"
7020+ }
7021+ },
7022+ "node_modules/typed-array-length": {
7023+ "version": "1.0.8",
7024+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz",
7025+ "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==",
7026+ "dev": true,
7027+ "license": "MIT",
7028+ "dependencies": {
7029+ "call-bind": "^1.0.9",
7030+ "for-each": "^0.3.5",
7031+ "gopd": "^1.2.0",
7032+ "is-typed-array": "^1.1.15",
7033+ "possible-typed-array-names": "^1.1.0",
7034+ "reflect.getprototypeof": "^1.0.10"
7035+ },
7036+ "engines": {
7037+ "node": ">= 0.4"
7038+ },
7039+ "funding": {
7040+ "url": "https://github.com/sponsors/ljharb"
7041+ }
7042+ },
7043+ "node_modules/typescript": {
7044+ "version": "5.9.3",
7045+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
7046+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
7047+ "dev": true,
7048+ "license": "Apache-2.0",
7049+ "bin": {
7050+ "tsc": "bin/tsc",
7051+ "tsserver": "bin/tsserver"
7052+ },
7053+ "engines": {
7054+ "node": ">=14.17"
7055+ }
7056+ },
7057+ "node_modules/typescript-eslint": {
7058+ "version": "8.65.0",
7059+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz",
7060+ "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==",
7061+ "dev": true,
7062+ "license": "MIT",
7063+ "dependencies": {
7064+ "@typescript-eslint/eslint-plugin": "8.65.0",
7065+ "@typescript-eslint/parser": "8.65.0",
7066+ "@typescript-eslint/typescript-estree": "8.65.0",
7067+ "@typescript-eslint/utils": "8.65.0"
7068+ },
7069+ "engines": {
7070+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
7071+ },
7072+ "funding": {
7073+ "type": "opencollective",
7074+ "url": "https://opencollective.com/typescript-eslint"
7075+ },
7076+ "peerDependencies": {
7077+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
7078+ "typescript": ">=4.8.4 <6.1.0"
7079+ }
7080+ },
7081+ "node_modules/unbox-primitive": {
7082+ "version": "1.1.0",
7083+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
7084+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
7085+ "dev": true,
7086+ "license": "MIT",
7087+ "dependencies": {
7088+ "call-bound": "^1.0.3",
7089+ "has-bigints": "^1.0.2",
7090+ "has-symbols": "^1.1.0",
7091+ "which-boxed-primitive": "^1.1.1"
7092+ },
7093+ "engines": {
7094+ "node": ">= 0.4"
7095+ },
7096+ "funding": {
7097+ "url": "https://github.com/sponsors/ljharb"
7098+ }
7099+ },
7100+ "node_modules/undici-types": {
7101+ "version": "6.21.0",
7102+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
7103+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
7104+ "dev": true,
7105+ "license": "MIT"
7106+ },
7107+ "node_modules/unrs-resolver": {
7108+ "version": "1.12.2",
7109+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz",
7110+ "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==",
7111+ "dev": true,
7112+ "hasInstallScript": true,
7113+ "license": "MIT",
7114+ "dependencies": {
7115+ "napi-postinstall": "^0.3.4"
7116+ },
7117+ "funding": {
7118+ "url": "https://opencollective.com/unrs-resolver"
7119+ },
7120+ "optionalDependencies": {
7121+ "@unrs/resolver-binding-android-arm-eabi": "1.12.2",
7122+ "@unrs/resolver-binding-android-arm64": "1.12.2",
7123+ "@unrs/resolver-binding-darwin-arm64": "1.12.2",
7124+ "@unrs/resolver-binding-darwin-x64": "1.12.2",
7125+ "@unrs/resolver-binding-freebsd-x64": "1.12.2",
7126+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2",
7127+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2",
7128+ "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2",
7129+ "@unrs/resolver-binding-linux-arm64-musl": "1.12.2",
7130+ "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2",
7131+ "@unrs/resolver-binding-linux-loong64-musl": "1.12.2",
7132+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2",
7133+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2",
7134+ "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2",
7135+ "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2",
7136+ "@unrs/resolver-binding-linux-x64-gnu": "1.12.2",
7137+ "@unrs/resolver-binding-linux-x64-musl": "1.12.2",
7138+ "@unrs/resolver-binding-openharmony-arm64": "1.12.2",
7139+ "@unrs/resolver-binding-wasm32-wasi": "1.12.2",
7140+ "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2",
7141+ "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2",
7142+ "@unrs/resolver-binding-win32-x64-msvc": "1.12.2"
7143+ }
7144+ },
7145+ "node_modules/update-browserslist-db": {
7146+ "version": "1.2.3",
7147+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
7148+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
7149+ "dev": true,
7150+ "funding": [
7151+ {
7152+ "type": "opencollective",
7153+ "url": "https://opencollective.com/browserslist"
7154+ },
7155+ {
7156+ "type": "tidelift",
7157+ "url": "https://tidelift.com/funding/github/npm/browserslist"
7158+ },
7159+ {
7160+ "type": "github",
7161+ "url": "https://github.com/sponsors/ai"
7162+ }
7163+ ],
7164+ "license": "MIT",
7165+ "dependencies": {
7166+ "escalade": "^3.2.0",
7167+ "picocolors": "^1.1.1"
7168+ },
7169+ "bin": {
7170+ "update-browserslist-db": "cli.js"
7171+ },
7172+ "peerDependencies": {
7173+ "browserslist": ">= 4.21.0"
7174+ }
7175+ },
7176+ "node_modules/uri-js": {
7177+ "version": "4.4.1",
7178+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
7179+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
7180+ "dev": true,
7181+ "license": "BSD-2-Clause",
7182+ "dependencies": {
7183+ "punycode": "^2.1.0"
7184+ }
7185+ },
7186+ "node_modules/which": {
7187+ "version": "2.0.2",
7188+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
7189+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
7190+ "dev": true,
7191+ "license": "ISC",
7192+ "dependencies": {
7193+ "isexe": "^2.0.0"
7194+ },
7195+ "bin": {
7196+ "node-which": "bin/node-which"
7197+ },
7198+ "engines": {
7199+ "node": ">= 8"
7200+ }
7201+ },
7202+ "node_modules/which-boxed-primitive": {
7203+ "version": "1.1.1",
7204+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
7205+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
7206+ "dev": true,
7207+ "license": "MIT",
7208+ "dependencies": {
7209+ "is-bigint": "^1.1.0",
7210+ "is-boolean-object": "^1.2.1",
7211+ "is-number-object": "^1.1.1",
7212+ "is-string": "^1.1.1",
7213+ "is-symbol": "^1.1.1"
7214+ },
7215+ "engines": {
7216+ "node": ">= 0.4"
7217+ },
7218+ "funding": {
7219+ "url": "https://github.com/sponsors/ljharb"
7220+ }
7221+ },
7222+ "node_modules/which-builtin-type": {
7223+ "version": "1.2.1",
7224+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
7225+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
7226+ "dev": true,
7227+ "license": "MIT",
7228+ "dependencies": {
7229+ "call-bound": "^1.0.2",
7230+ "function.prototype.name": "^1.1.6",
7231+ "has-tostringtag": "^1.0.2",
7232+ "is-async-function": "^2.0.0",
7233+ "is-date-object": "^1.1.0",
7234+ "is-finalizationregistry": "^1.1.0",
7235+ "is-generator-function": "^1.0.10",
7236+ "is-regex": "^1.2.1",
7237+ "is-weakref": "^1.0.2",
7238+ "isarray": "^2.0.5",
7239+ "which-boxed-primitive": "^1.1.0",
7240+ "which-collection": "^1.0.2",
7241+ "which-typed-array": "^1.1.16"
7242+ },
7243+ "engines": {
7244+ "node": ">= 0.4"
7245+ },
7246+ "funding": {
7247+ "url": "https://github.com/sponsors/ljharb"
7248+ }
7249+ },
7250+ "node_modules/which-collection": {
7251+ "version": "1.0.2",
7252+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
7253+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
7254+ "dev": true,
7255+ "license": "MIT",
7256+ "dependencies": {
7257+ "is-map": "^2.0.3",
7258+ "is-set": "^2.0.3",
7259+ "is-weakmap": "^2.0.2",
7260+ "is-weakset": "^2.0.3"
7261+ },
7262+ "engines": {
7263+ "node": ">= 0.4"
7264+ },
7265+ "funding": {
7266+ "url": "https://github.com/sponsors/ljharb"
7267+ }
7268+ },
7269+ "node_modules/which-typed-array": {
7270+ "version": "1.1.22",
7271+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz",
7272+ "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==",
7273+ "dev": true,
7274+ "license": "MIT",
7275+ "dependencies": {
7276+ "available-typed-arrays": "^1.0.7",
7277+ "call-bind": "^1.0.9",
7278+ "call-bound": "^1.0.4",
7279+ "for-each": "^0.3.5",
7280+ "get-proto": "^1.0.1",
7281+ "gopd": "^1.2.0",
7282+ "has-tostringtag": "^1.0.2"
7283+ },
7284+ "engines": {
7285+ "node": ">= 0.4"
7286+ },
7287+ "funding": {
7288+ "url": "https://github.com/sponsors/ljharb"
7289+ }
7290+ },
7291+ "node_modules/word-wrap": {
7292+ "version": "1.2.5",
7293+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
7294+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
7295+ "dev": true,
7296+ "license": "MIT",
7297+ "engines": {
7298+ "node": ">=0.10.0"
7299+ }
7300+ },
7301+ "node_modules/yallist": {
7302+ "version": "3.1.1",
7303+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
7304+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
7305+ "dev": true,
7306+ "license": "ISC"
7307+ },
7308+ "node_modules/yocto-queue": {
7309+ "version": "0.1.0",
7310+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
7311+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
7312+ "dev": true,
7313+ "license": "MIT",
7314+ "engines": {
7315+ "node": ">=10"
7316+ },
7317+ "funding": {
7318+ "url": "https://github.com/sponsors/sindresorhus"
7319+ }
7320+ },
7321+ "node_modules/zod": {
7322+ "version": "4.4.3",
7323+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
7324+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
7325+ "dev": true,
7326+ "license": "MIT",
7327+ "funding": {
7328+ "url": "https://github.com/sponsors/colinhacks"
7329+ }
7330+ },
7331+ "node_modules/zod-validation-error": {
7332+ "version": "4.0.2",
7333+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
7334+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
7335+ "dev": true,
7336+ "license": "MIT",
7337+ "engines": {
7338+ "node": ">=18.0.0"
7339+ },
7340+ "peerDependencies": {
7341+ "zod": "^3.25.0 || ^4.0.0"
7342+ }
7343+ }
7344+ }
7345+}
new file mode 100644
@@ -0,0 +1,7345 @@
1+{
2+ "name": "blade-team-architect",
3+ "version": "1.0.0",
4+ "lockfileVersion": 3,
5+ "requires": true,
6+ "packages": {
7+ "": {
8+ "name": "blade-team-architect",
9+ "version": "1.0.0",
10+ "license": "MIT",
11+ "dependencies": {
12+ "next": "^16.2.12",
13+ "react": "^19.2.8",
14+ "react-dom": "^19.2.8"
15+ },
16+ "devDependencies": {
17+ "@tailwindcss/postcss": "^4.3.3",
18+ "@types/node": "^22.19.19",
19+ "@types/react": "^19.2.14",
20+ "@types/react-dom": "^19.2.3",
21+ "eslint": "^9.39.4",
22+ "eslint-config-next": "^16.2.12",
23+ "tailwindcss": "^4.3.3",
24+ "tsx": "^4.23.5",
25+ "typescript": "^5.9.3"
26+ },
27+ "engines": {
28+ "node": ">=20.9.0"
29+ }
30+ },
31+ "node_modules/@alloc/quick-lru": {
32+ "version": "5.2.0",
33+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
34+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
35+ "dev": true,
36+ "license": "MIT",
37+ "engines": {
38+ "node": ">=10"
39+ },
40+ "funding": {
41+ "url": "https://github.com/sponsors/sindresorhus"
42+ }
43+ },
44+ "node_modules/@babel/code-frame": {
45+ "version": "7.29.7",
46+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
47+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
48+ "dev": true,
49+ "license": "MIT",
50+ "dependencies": {
51+ "@babel/helper-validator-identifier": "^7.29.7",
52+ "js-tokens": "^4.0.0",
53+ "picocolors": "^1.1.1"
54+ },
55+ "engines": {
56+ "node": ">=6.9.0"
57+ }
58+ },
59+ "node_modules/@babel/compat-data": {
60+ "version": "7.29.7",
61+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
62+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
63+ "dev": true,
64+ "license": "MIT",
65+ "engines": {
66+ "node": ">=6.9.0"
67+ }
68+ },
69+ "node_modules/@babel/core": {
70+ "version": "7.29.7",
71+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
72+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
73+ "dev": true,
74+ "license": "MIT",
75+ "dependencies": {
76+ "@babel/code-frame": "^7.29.7",
77+ "@babel/generator": "^7.29.7",
78+ "@babel/helper-compilation-targets": "^7.29.7",
79+ "@babel/helper-module-transforms": "^7.29.7",
80+ "@babel/helpers": "^7.29.7",
81+ "@babel/parser": "^7.29.7",
82+ "@babel/template": "^7.29.7",
83+ "@babel/traverse": "^7.29.7",
84+ "@babel/types": "^7.29.7",
85+ "@jridgewell/remapping": "^2.3.5",
86+ "convert-source-map": "^2.0.0",
87+ "debug": "^4.1.0",
88+ "gensync": "^1.0.0-beta.2",
89+ "json5": "^2.2.3",
90+ "semver": "^6.3.1"
91+ },
92+ "engines": {
93+ "node": ">=6.9.0"
94+ },
95+ "funding": {
96+ "type": "opencollective",
97+ "url": "https://opencollective.com/babel"
98+ }
99+ },
100+ "node_modules/@babel/generator": {
101+ "version": "7.29.8",
102+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
103+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
104+ "dev": true,
105+ "license": "MIT",
106+ "dependencies": {
107+ "@babel/parser": "^7.29.8",
108+ "@babel/types": "^7.29.8",
109+ "@jridgewell/gen-mapping": "^0.3.12",
110+ "@jridgewell/trace-mapping": "^0.3.28",
111+ "jsesc": "^3.0.2"
112+ },
113+ "engines": {
114+ "node": ">=6.9.0"
115+ }
116+ },
117+ "node_modules/@babel/helper-compilation-targets": {
118+ "version": "7.29.7",
119+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
120+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
121+ "dev": true,
122+ "license": "MIT",
123+ "dependencies": {
124+ "@babel/compat-data": "^7.29.7",
125+ "@babel/helper-validator-option": "^7.29.7",
126+ "browserslist": "^4.24.0",
127+ "lru-cache": "^5.1.1",
128+ "semver": "^6.3.1"
129+ },
130+ "engines": {
131+ "node": ">=6.9.0"
132+ }
133+ },
134+ "node_modules/@babel/helper-globals": {
135+ "version": "7.29.7",
136+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
137+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
138+ "dev": true,
139+ "license": "MIT",
140+ "engines": {
141+ "node": ">=6.9.0"
142+ }
143+ },
144+ "node_modules/@babel/helper-module-imports": {
145+ "version": "7.29.7",
146+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
147+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
148+ "dev": true,
149+ "license": "MIT",
150+ "dependencies": {
151+ "@babel/traverse": "^7.29.7",
152+ "@babel/types": "^7.29.7"
153+ },
154+ "engines": {
155+ "node": ">=6.9.0"
156+ }
157+ },
158+ "node_modules/@babel/helper-module-transforms": {
159+ "version": "7.29.7",
160+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
161+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
162+ "dev": true,
163+ "license": "MIT",
164+ "dependencies": {
165+ "@babel/helper-module-imports": "^7.29.7",
166+ "@babel/helper-validator-identifier": "^7.29.7",
167+ "@babel/traverse": "^7.29.7"
168+ },
169+ "engines": {
170+ "node": ">=6.9.0"
171+ },
172+ "peerDependencies": {
173+ "@babel/core": "^7.0.0"
174+ }
175+ },
176+ "node_modules/@babel/helper-string-parser": {
177+ "version": "7.29.7",
178+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
179+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
180+ "dev": true,
181+ "license": "MIT",
182+ "engines": {
183+ "node": ">=6.9.0"
184+ }
185+ },
186+ "node_modules/@babel/helper-validator-identifier": {
187+ "version": "7.29.7",
188+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
189+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
190+ "dev": true,
191+ "license": "MIT",
192+ "engines": {
193+ "node": ">=6.9.0"
194+ }
195+ },
196+ "node_modules/@babel/helper-validator-option": {
197+ "version": "7.29.7",
198+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
199+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
200+ "dev": true,
201+ "license": "MIT",
202+ "engines": {
203+ "node": ">=6.9.0"
204+ }
205+ },
206+ "node_modules/@babel/helpers": {
207+ "version": "7.29.7",
208+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
209+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
210+ "dev": true,
211+ "license": "MIT",
212+ "dependencies": {
213+ "@babel/template": "^7.29.7",
214+ "@babel/types": "^7.29.7"
215+ },
216+ "engines": {
217+ "node": ">=6.9.0"
218+ }
219+ },
220+ "node_modules/@babel/parser": {
221+ "version": "7.29.8",
222+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
223+ "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
224+ "dev": true,
225+ "license": "MIT",
226+ "dependencies": {
227+ "@babel/types": "^7.29.8"
228+ },
229+ "bin": {
230+ "parser": "bin/babel-parser.js"
231+ },
232+ "engines": {
233+ "node": ">=6.0.0"
234+ }
235+ },
236+ "node_modules/@babel/template": {
237+ "version": "7.29.7",
238+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
239+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
240+ "dev": true,
241+ "license": "MIT",
242+ "dependencies": {
243+ "@babel/code-frame": "^7.29.7",
244+ "@babel/parser": "^7.29.7",
245+ "@babel/types": "^7.29.7"
246+ },
247+ "engines": {
248+ "node": ">=6.9.0"
249+ }
250+ },
251+ "node_modules/@babel/traverse": {
252+ "version": "7.29.8",
253+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
254+ "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
255+ "dev": true,
256+ "license": "MIT",
257+ "dependencies": {
258+ "@babel/code-frame": "^7.29.7",
259+ "@babel/generator": "^7.29.8",
260+ "@babel/helper-globals": "^7.29.7",
261+ "@babel/parser": "^7.29.8",
262+ "@babel/template": "^7.29.7",
263+ "@babel/types": "^7.29.8",
264+ "debug": "^4.3.1"
265+ },
266+ "engines": {
267+ "node": ">=6.9.0"
268+ }
269+ },
270+ "node_modules/@babel/types": {
271+ "version": "7.29.8",
272+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
273+ "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
274+ "dev": true,
275+ "license": "MIT",
276+ "dependencies": {
277+ "@babel/helper-string-parser": "^7.29.7",
278+ "@babel/helper-validator-identifier": "^7.29.7"
279+ },
280+ "engines": {
281+ "node": ">=6.9.0"
282+ }
283+ },
284+ "node_modules/@emnapi/core": {
285+ "version": "1.10.0",
286+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
287+ "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==",
288+ "dev": true,
289+ "license": "MIT",
290+ "optional": true,
291+ "dependencies": {
292+ "@emnapi/wasi-threads": "1.2.1",
293+ "tslib": "^2.4.0"
294+ }
295+ },
296+ "node_modules/@emnapi/runtime": {
297+ "version": "1.11.3",
298+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
299+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
300+ "license": "MIT",
301+ "optional": true,
302+ "dependencies": {
303+ "tslib": "^2.4.0"
304+ }
305+ },
306+ "node_modules/@emnapi/wasi-threads": {
307+ "version": "1.2.1",
308+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
309+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
310+ "dev": true,
311+ "license": "MIT",
312+ "optional": true,
313+ "dependencies": {
314+ "tslib": "^2.4.0"
315+ }
316+ },
317+ "node_modules/@esbuild/aix-ppc64": {
318+ "version": "0.28.1",
319+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz",
320+ "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==",
321+ "cpu": [
322+ "ppc64"
323+ ],
324+ "dev": true,
325+ "license": "MIT",
326+ "optional": true,
327+ "os": [
328+ "aix"
329+ ],
330+ "engines": {
331+ "node": ">=18"
332+ }
333+ },
334+ "node_modules/@esbuild/android-arm": {
335+ "version": "0.28.1",
336+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz",
337+ "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==",
338+ "cpu": [
339+ "arm"
340+ ],
341+ "dev": true,
342+ "license": "MIT",
343+ "optional": true,
344+ "os": [
345+ "android"
346+ ],
347+ "engines": {
348+ "node": ">=18"
349+ }
350+ },
351+ "node_modules/@esbuild/android-arm64": {
352+ "version": "0.28.1",
353+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz",
354+ "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==",
355+ "cpu": [
356+ "arm64"
357+ ],
358+ "dev": true,
359+ "license": "MIT",
360+ "optional": true,
361+ "os": [
362+ "android"
363+ ],
364+ "engines": {
365+ "node": ">=18"
366+ }
367+ },
368+ "node_modules/@esbuild/android-x64": {
369+ "version": "0.28.1",
370+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz",
371+ "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==",
372+ "cpu": [
373+ "x64"
374+ ],
375+ "dev": true,
376+ "license": "MIT",
377+ "optional": true,
378+ "os": [
379+ "android"
380+ ],
381+ "engines": {
382+ "node": ">=18"
383+ }
384+ },
385+ "node_modules/@esbuild/darwin-arm64": {
386+ "version": "0.28.1",
387+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz",
388+ "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==",
389+ "cpu": [
390+ "arm64"
391+ ],
392+ "dev": true,
393+ "license": "MIT",
394+ "optional": true,
395+ "os": [
396+ "darwin"
397+ ],
398+ "engines": {
399+ "node": ">=18"
400+ }
401+ },
402+ "node_modules/@esbuild/darwin-x64": {
403+ "version": "0.28.1",
404+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz",
405+ "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==",
406+ "cpu": [
407+ "x64"
408+ ],
409+ "dev": true,
410+ "license": "MIT",
411+ "optional": true,
412+ "os": [
413+ "darwin"
414+ ],
415+ "engines": {
416+ "node": ">=18"
417+ }
418+ },
419+ "node_modules/@esbuild/freebsd-arm64": {
420+ "version": "0.28.1",
421+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz",
422+ "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==",
423+ "cpu": [
424+ "arm64"
425+ ],
426+ "dev": true,
427+ "license": "MIT",
428+ "optional": true,
429+ "os": [
430+ "freebsd"
431+ ],
432+ "engines": {
433+ "node": ">=18"
434+ }
435+ },
436+ "node_modules/@esbuild/freebsd-x64": {
437+ "version": "0.28.1",
438+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz",
439+ "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==",
440+ "cpu": [
441+ "x64"
442+ ],
443+ "dev": true,
444+ "license": "MIT",
445+ "optional": true,
446+ "os": [
447+ "freebsd"
448+ ],
449+ "engines": {
450+ "node": ">=18"
451+ }
452+ },
453+ "node_modules/@esbuild/linux-arm": {
454+ "version": "0.28.1",
455+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz",
456+ "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==",
457+ "cpu": [
458+ "arm"
459+ ],
460+ "dev": true,
461+ "license": "MIT",
462+ "optional": true,
463+ "os": [
464+ "linux"
465+ ],
466+ "engines": {
467+ "node": ">=18"
468+ }
469+ },
470+ "node_modules/@esbuild/linux-arm64": {
471+ "version": "0.28.1",
472+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz",
473+ "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==",
474+ "cpu": [
475+ "arm64"
476+ ],
477+ "dev": true,
478+ "license": "MIT",
479+ "optional": true,
480+ "os": [
481+ "linux"
482+ ],
483+ "engines": {
484+ "node": ">=18"
485+ }
486+ },
487+ "node_modules/@esbuild/linux-ia32": {
488+ "version": "0.28.1",
489+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz",
490+ "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==",
491+ "cpu": [
492+ "ia32"
493+ ],
494+ "dev": true,
495+ "license": "MIT",
496+ "optional": true,
497+ "os": [
498+ "linux"
499+ ],
500+ "engines": {
501+ "node": ">=18"
502+ }
503+ },
504+ "node_modules/@esbuild/linux-loong64": {
505+ "version": "0.28.1",
506+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz",
507+ "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==",
508+ "cpu": [
509+ "loong64"
510+ ],
511+ "dev": true,
512+ "license": "MIT",
513+ "optional": true,
514+ "os": [
515+ "linux"
516+ ],
517+ "engines": {
518+ "node": ">=18"
519+ }
520+ },
521+ "node_modules/@esbuild/linux-mips64el": {
522+ "version": "0.28.1",
523+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz",
524+ "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==",
525+ "cpu": [
526+ "mips64el"
527+ ],
528+ "dev": true,
529+ "license": "MIT",
530+ "optional": true,
531+ "os": [
532+ "linux"
533+ ],
534+ "engines": {
535+ "node": ">=18"
536+ }
537+ },
538+ "node_modules/@esbuild/linux-ppc64": {
539+ "version": "0.28.1",
540+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz",
541+ "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==",
542+ "cpu": [
543+ "ppc64"
544+ ],
545+ "dev": true,
546+ "license": "MIT",
547+ "optional": true,
548+ "os": [
549+ "linux"
550+ ],
551+ "engines": {
552+ "node": ">=18"
553+ }
554+ },
555+ "node_modules/@esbuild/linux-riscv64": {
556+ "version": "0.28.1",
557+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz",
558+ "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==",
559+ "cpu": [
560+ "riscv64"
561+ ],
562+ "dev": true,
563+ "license": "MIT",
564+ "optional": true,
565+ "os": [
566+ "linux"
567+ ],
568+ "engines": {
569+ "node": ">=18"
570+ }
571+ },
572+ "node_modules/@esbuild/linux-s390x": {
573+ "version": "0.28.1",
574+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz",
575+ "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==",
576+ "cpu": [
577+ "s390x"
578+ ],
579+ "dev": true,
580+ "license": "MIT",
581+ "optional": true,
582+ "os": [
583+ "linux"
584+ ],
585+ "engines": {
586+ "node": ">=18"
587+ }
588+ },
589+ "node_modules/@esbuild/linux-x64": {
590+ "version": "0.28.1",
591+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz",
592+ "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==",
593+ "cpu": [
594+ "x64"
595+ ],
596+ "dev": true,
597+ "license": "MIT",
598+ "optional": true,
599+ "os": [
600+ "linux"
601+ ],
602+ "engines": {
603+ "node": ">=18"
604+ }
605+ },
606+ "node_modules/@esbuild/netbsd-arm64": {
607+ "version": "0.28.1",
608+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz",
609+ "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==",
610+ "cpu": [
611+ "arm64"
612+ ],
613+ "dev": true,
614+ "license": "MIT",
615+ "optional": true,
616+ "os": [
617+ "netbsd"
618+ ],
619+ "engines": {
620+ "node": ">=18"
621+ }
622+ },
623+ "node_modules/@esbuild/netbsd-x64": {
624+ "version": "0.28.1",
625+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz",
626+ "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==",
627+ "cpu": [
628+ "x64"
629+ ],
630+ "dev": true,
631+ "license": "MIT",
632+ "optional": true,
633+ "os": [
634+ "netbsd"
635+ ],
636+ "engines": {
637+ "node": ">=18"
638+ }
639+ },
640+ "node_modules/@esbuild/openbsd-arm64": {
641+ "version": "0.28.1",
642+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz",
643+ "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==",
644+ "cpu": [
645+ "arm64"
646+ ],
647+ "dev": true,
648+ "license": "MIT",
649+ "optional": true,
650+ "os": [
651+ "openbsd"
652+ ],
653+ "engines": {
654+ "node": ">=18"
655+ }
656+ },
657+ "node_modules/@esbuild/openbsd-x64": {
658+ "version": "0.28.1",
659+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz",
660+ "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==",
661+ "cpu": [
662+ "x64"
663+ ],
664+ "dev": true,
665+ "license": "MIT",
666+ "optional": true,
667+ "os": [
668+ "openbsd"
669+ ],
670+ "engines": {
671+ "node": ">=18"
672+ }
673+ },
674+ "node_modules/@esbuild/openharmony-arm64": {
675+ "version": "0.28.1",
676+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz",
677+ "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==",
678+ "cpu": [
679+ "arm64"
680+ ],
681+ "dev": true,
682+ "license": "MIT",
683+ "optional": true,
684+ "os": [
685+ "openharmony"
686+ ],
687+ "engines": {
688+ "node": ">=18"
689+ }
690+ },
691+ "node_modules/@esbuild/sunos-x64": {
692+ "version": "0.28.1",
693+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz",
694+ "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==",
695+ "cpu": [
696+ "x64"
697+ ],
698+ "dev": true,
699+ "license": "MIT",
700+ "optional": true,
701+ "os": [
702+ "sunos"
703+ ],
704+ "engines": {
705+ "node": ">=18"
706+ }
707+ },
708+ "node_modules/@esbuild/win32-arm64": {
709+ "version": "0.28.1",
710+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz",
711+ "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==",
712+ "cpu": [
713+ "arm64"
714+ ],
715+ "dev": true,
716+ "license": "MIT",
717+ "optional": true,
718+ "os": [
719+ "win32"
720+ ],
721+ "engines": {
722+ "node": ">=18"
723+ }
724+ },
725+ "node_modules/@esbuild/win32-ia32": {
726+ "version": "0.28.1",
727+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz",
728+ "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==",
729+ "cpu": [
730+ "ia32"
731+ ],
732+ "dev": true,
733+ "license": "MIT",
734+ "optional": true,
735+ "os": [
736+ "win32"
737+ ],
738+ "engines": {
739+ "node": ">=18"
740+ }
741+ },
742+ "node_modules/@esbuild/win32-x64": {
743+ "version": "0.28.1",
744+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz",
745+ "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==",
746+ "cpu": [
747+ "x64"
748+ ],
749+ "dev": true,
750+ "license": "MIT",
751+ "optional": true,
752+ "os": [
753+ "win32"
754+ ],
755+ "engines": {
756+ "node": ">=18"
757+ }
758+ },
759+ "node_modules/@eslint-community/eslint-utils": {
760+ "version": "4.10.1",
761+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
762+ "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
763+ "dev": true,
764+ "license": "MIT",
765+ "dependencies": {
766+ "eslint-visitor-keys": "^3.4.3"
767+ },
768+ "engines": {
769+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
770+ },
771+ "funding": {
772+ "url": "https://opencollective.com/eslint"
773+ },
774+ "peerDependencies": {
775+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
776+ }
777+ },
778+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
779+ "version": "3.4.3",
780+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
781+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
782+ "dev": true,
783+ "license": "Apache-2.0",
784+ "engines": {
785+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
786+ },
787+ "funding": {
788+ "url": "https://opencollective.com/eslint"
789+ }
790+ },
791+ "node_modules/@eslint-community/regexpp": {
792+ "version": "4.12.2",
793+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
794+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
795+ "dev": true,
796+ "license": "MIT",
797+ "engines": {
798+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
799+ }
800+ },
801+ "node_modules/@eslint/config-array": {
802+ "version": "0.21.2",
803+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
804+ "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
805+ "dev": true,
806+ "license": "Apache-2.0",
807+ "dependencies": {
808+ "@eslint/object-schema": "^2.1.7",
809+ "debug": "^4.3.1",
810+ "minimatch": "^3.1.5"
811+ },
812+ "engines": {
813+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
814+ }
815+ },
816+ "node_modules/@eslint/config-helpers": {
817+ "version": "0.4.2",
818+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
819+ "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
820+ "dev": true,
821+ "license": "Apache-2.0",
822+ "dependencies": {
823+ "@eslint/core": "^0.17.0"
824+ },
825+ "engines": {
826+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
827+ }
828+ },
829+ "node_modules/@eslint/core": {
830+ "version": "0.17.0",
831+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
832+ "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
833+ "dev": true,
834+ "license": "Apache-2.0",
835+ "dependencies": {
836+ "@types/json-schema": "^7.0.15"
837+ },
838+ "engines": {
839+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
840+ }
841+ },
842+ "node_modules/@eslint/eslintrc": {
843+ "version": "3.3.6",
844+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
845+ "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
846+ "dev": true,
847+ "license": "MIT",
848+ "dependencies": {
849+ "ajv": "^6.14.0",
850+ "debug": "^4.3.2",
851+ "espree": "^10.0.1",
852+ "globals": "^14.0.0",
853+ "ignore": "^5.2.0",
854+ "import-fresh": "^3.2.1",
855+ "js-yaml": "^4.3.0",
856+ "minimatch": "^3.1.5",
857+ "strip-json-comments": "^3.1.1"
858+ },
859+ "engines": {
860+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
861+ },
862+ "funding": {
863+ "url": "https://opencollective.com/eslint"
864+ }
865+ },
866+ "node_modules/@eslint/js": {
867+ "version": "9.39.5",
868+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
869+ "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
870+ "dev": true,
871+ "license": "MIT",
872+ "engines": {
873+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
874+ },
875+ "funding": {
876+ "url": "https://eslint.org/donate"
877+ }
878+ },
879+ "node_modules/@eslint/object-schema": {
880+ "version": "2.1.7",
881+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
882+ "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
883+ "dev": true,
884+ "license": "Apache-2.0",
885+ "engines": {
886+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
887+ }
888+ },
889+ "node_modules/@eslint/plugin-kit": {
890+ "version": "0.4.1",
891+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
892+ "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
893+ "dev": true,
894+ "license": "Apache-2.0",
895+ "dependencies": {
896+ "@eslint/core": "^0.17.0",
897+ "levn": "^0.4.1"
898+ },
899+ "engines": {
900+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
901+ }
902+ },
903+ "node_modules/@humanfs/core": {
904+ "version": "0.19.2",
905+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
906+ "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
907+ "dev": true,
908+ "license": "Apache-2.0",
909+ "dependencies": {
910+ "@humanfs/types": "^0.15.0"
911+ },
912+ "engines": {
913+ "node": ">=18.18.0"
914+ }
915+ },
916+ "node_modules/@humanfs/node": {
917+ "version": "0.16.8",
918+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
919+ "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
920+ "dev": true,
921+ "license": "Apache-2.0",
922+ "dependencies": {
923+ "@humanfs/core": "^0.19.2",
924+ "@humanfs/types": "^0.15.0",
925+ "@humanwhocodes/retry": "^0.4.0"
926+ },
927+ "engines": {
928+ "node": ">=18.18.0"
929+ }
930+ },
931+ "node_modules/@humanfs/types": {
932+ "version": "0.15.0",
933+ "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
934+ "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
935+ "dev": true,
936+ "license": "Apache-2.0",
937+ "engines": {
938+ "node": ">=18.18.0"
939+ }
940+ },
941+ "node_modules/@humanwhocodes/module-importer": {
942+ "version": "1.0.1",
943+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
944+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
945+ "dev": true,
946+ "license": "Apache-2.0",
947+ "engines": {
948+ "node": ">=12.22"
949+ },
950+ "funding": {
951+ "type": "github",
952+ "url": "https://github.com/sponsors/nzakas"
953+ }
954+ },
955+ "node_modules/@humanwhocodes/retry": {
956+ "version": "0.4.3",
957+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
958+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
959+ "dev": true,
960+ "license": "Apache-2.0",
961+ "engines": {
962+ "node": ">=18.18"
963+ },
964+ "funding": {
965+ "type": "github",
966+ "url": "https://github.com/sponsors/nzakas"
967+ }
968+ },
969+ "node_modules/@img/colour": {
970+ "version": "1.1.0",
971+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
972+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
973+ "license": "MIT",
974+ "optional": true,
975+ "engines": {
976+ "node": ">=18"
977+ }
978+ },
979+ "node_modules/@img/sharp-darwin-arm64": {
980+ "version": "0.34.5",
981+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
982+ "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
983+ "cpu": [
984+ "arm64"
985+ ],
986+ "license": "Apache-2.0",
987+ "optional": true,
988+ "os": [
989+ "darwin"
990+ ],
991+ "engines": {
992+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
993+ },
994+ "funding": {
995+ "url": "https://opencollective.com/libvips"
996+ },
997+ "optionalDependencies": {
998+ "@img/sharp-libvips-darwin-arm64": "1.2.4"
999+ }
1000+ },
1001+ "node_modules/@img/sharp-darwin-x64": {
1002+ "version": "0.34.5",
1003+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
1004+ "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
1005+ "cpu": [
1006+ "x64"
1007+ ],
1008+ "license": "Apache-2.0",
1009+ "optional": true,
1010+ "os": [
1011+ "darwin"
1012+ ],
1013+ "engines": {
1014+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1015+ },
1016+ "funding": {
1017+ "url": "https://opencollective.com/libvips"
1018+ },
1019+ "optionalDependencies": {
1020+ "@img/sharp-libvips-darwin-x64": "1.2.4"
1021+ }
1022+ },
1023+ "node_modules/@img/sharp-libvips-darwin-arm64": {
1024+ "version": "1.2.4",
1025+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
1026+ "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
1027+ "cpu": [
1028+ "arm64"
1029+ ],
1030+ "license": "LGPL-3.0-or-later",
1031+ "optional": true,
1032+ "os": [
1033+ "darwin"
1034+ ],
1035+ "funding": {
1036+ "url": "https://opencollective.com/libvips"
1037+ }
1038+ },
1039+ "node_modules/@img/sharp-libvips-darwin-x64": {
1040+ "version": "1.2.4",
1041+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
1042+ "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
1043+ "cpu": [
1044+ "x64"
1045+ ],
1046+ "license": "LGPL-3.0-or-later",
1047+ "optional": true,
1048+ "os": [
1049+ "darwin"
1050+ ],
1051+ "funding": {
1052+ "url": "https://opencollective.com/libvips"
1053+ }
1054+ },
1055+ "node_modules/@img/sharp-libvips-linux-arm": {
1056+ "version": "1.2.4",
1057+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
1058+ "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
1059+ "cpu": [
1060+ "arm"
1061+ ],
1062+ "libc": [
1063+ "glibc"
1064+ ],
1065+ "license": "LGPL-3.0-or-later",
1066+ "optional": true,
1067+ "os": [
1068+ "linux"
1069+ ],
1070+ "funding": {
1071+ "url": "https://opencollective.com/libvips"
1072+ }
1073+ },
1074+ "node_modules/@img/sharp-libvips-linux-arm64": {
1075+ "version": "1.2.4",
1076+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
1077+ "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
1078+ "cpu": [
1079+ "arm64"
1080+ ],
1081+ "libc": [
1082+ "glibc"
1083+ ],
1084+ "license": "LGPL-3.0-or-later",
1085+ "optional": true,
1086+ "os": [
1087+ "linux"
1088+ ],
1089+ "funding": {
1090+ "url": "https://opencollective.com/libvips"
1091+ }
1092+ },
1093+ "node_modules/@img/sharp-libvips-linux-ppc64": {
1094+ "version": "1.2.4",
1095+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
1096+ "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
1097+ "cpu": [
1098+ "ppc64"
1099+ ],
1100+ "libc": [
1101+ "glibc"
1102+ ],
1103+ "license": "LGPL-3.0-or-later",
1104+ "optional": true,
1105+ "os": [
1106+ "linux"
1107+ ],
1108+ "funding": {
1109+ "url": "https://opencollective.com/libvips"
1110+ }
1111+ },
1112+ "node_modules/@img/sharp-libvips-linux-riscv64": {
1113+ "version": "1.2.4",
1114+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
1115+ "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
1116+ "cpu": [
1117+ "riscv64"
1118+ ],
1119+ "libc": [
1120+ "glibc"
1121+ ],
1122+ "license": "LGPL-3.0-or-later",
1123+ "optional": true,
1124+ "os": [
1125+ "linux"
1126+ ],
1127+ "funding": {
1128+ "url": "https://opencollective.com/libvips"
1129+ }
1130+ },
1131+ "node_modules/@img/sharp-libvips-linux-s390x": {
1132+ "version": "1.2.4",
1133+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
1134+ "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
1135+ "cpu": [
1136+ "s390x"
1137+ ],
1138+ "libc": [
1139+ "glibc"
1140+ ],
1141+ "license": "LGPL-3.0-or-later",
1142+ "optional": true,
1143+ "os": [
1144+ "linux"
1145+ ],
1146+ "funding": {
1147+ "url": "https://opencollective.com/libvips"
1148+ }
1149+ },
1150+ "node_modules/@img/sharp-libvips-linux-x64": {
1151+ "version": "1.2.4",
1152+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
1153+ "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
1154+ "cpu": [
1155+ "x64"
1156+ ],
1157+ "libc": [
1158+ "glibc"
1159+ ],
1160+ "license": "LGPL-3.0-or-later",
1161+ "optional": true,
1162+ "os": [
1163+ "linux"
1164+ ],
1165+ "funding": {
1166+ "url": "https://opencollective.com/libvips"
1167+ }
1168+ },
1169+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
1170+ "version": "1.2.4",
1171+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
1172+ "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
1173+ "cpu": [
1174+ "arm64"
1175+ ],
1176+ "libc": [
1177+ "musl"
1178+ ],
1179+ "license": "LGPL-3.0-or-later",
1180+ "optional": true,
1181+ "os": [
1182+ "linux"
1183+ ],
1184+ "funding": {
1185+ "url": "https://opencollective.com/libvips"
1186+ }
1187+ },
1188+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
1189+ "version": "1.2.4",
1190+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
1191+ "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
1192+ "cpu": [
1193+ "x64"
1194+ ],
1195+ "libc": [
1196+ "musl"
1197+ ],
1198+ "license": "LGPL-3.0-or-later",
1199+ "optional": true,
1200+ "os": [
1201+ "linux"
1202+ ],
1203+ "funding": {
1204+ "url": "https://opencollective.com/libvips"
1205+ }
1206+ },
1207+ "node_modules/@img/sharp-linux-arm": {
1208+ "version": "0.34.5",
1209+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
1210+ "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
1211+ "cpu": [
1212+ "arm"
1213+ ],
1214+ "libc": [
1215+ "glibc"
1216+ ],
1217+ "license": "Apache-2.0",
1218+ "optional": true,
1219+ "os": [
1220+ "linux"
1221+ ],
1222+ "engines": {
1223+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1224+ },
1225+ "funding": {
1226+ "url": "https://opencollective.com/libvips"
1227+ },
1228+ "optionalDependencies": {
1229+ "@img/sharp-libvips-linux-arm": "1.2.4"
1230+ }
1231+ },
1232+ "node_modules/@img/sharp-linux-arm64": {
1233+ "version": "0.34.5",
1234+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
1235+ "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
1236+ "cpu": [
1237+ "arm64"
1238+ ],
1239+ "libc": [
1240+ "glibc"
1241+ ],
1242+ "license": "Apache-2.0",
1243+ "optional": true,
1244+ "os": [
1245+ "linux"
1246+ ],
1247+ "engines": {
1248+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1249+ },
1250+ "funding": {
1251+ "url": "https://opencollective.com/libvips"
1252+ },
1253+ "optionalDependencies": {
1254+ "@img/sharp-libvips-linux-arm64": "1.2.4"
1255+ }
1256+ },
1257+ "node_modules/@img/sharp-linux-ppc64": {
1258+ "version": "0.34.5",
1259+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
1260+ "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
1261+ "cpu": [
1262+ "ppc64"
1263+ ],
1264+ "libc": [
1265+ "glibc"
1266+ ],
1267+ "license": "Apache-2.0",
1268+ "optional": true,
1269+ "os": [
1270+ "linux"
1271+ ],
1272+ "engines": {
1273+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1274+ },
1275+ "funding": {
1276+ "url": "https://opencollective.com/libvips"
1277+ },
1278+ "optionalDependencies": {
1279+ "@img/sharp-libvips-linux-ppc64": "1.2.4"
1280+ }
1281+ },
1282+ "node_modules/@img/sharp-linux-riscv64": {
1283+ "version": "0.34.5",
1284+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
1285+ "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
1286+ "cpu": [
1287+ "riscv64"
1288+ ],
1289+ "libc": [
1290+ "glibc"
1291+ ],
1292+ "license": "Apache-2.0",
1293+ "optional": true,
1294+ "os": [
1295+ "linux"
1296+ ],
1297+ "engines": {
1298+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1299+ },
1300+ "funding": {
1301+ "url": "https://opencollective.com/libvips"
1302+ },
1303+ "optionalDependencies": {
1304+ "@img/sharp-libvips-linux-riscv64": "1.2.4"
1305+ }
1306+ },
1307+ "node_modules/@img/sharp-linux-s390x": {
1308+ "version": "0.34.5",
1309+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
1310+ "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
1311+ "cpu": [
1312+ "s390x"
1313+ ],
1314+ "libc": [
1315+ "glibc"
1316+ ],
1317+ "license": "Apache-2.0",
1318+ "optional": true,
1319+ "os": [
1320+ "linux"
1321+ ],
1322+ "engines": {
1323+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1324+ },
1325+ "funding": {
1326+ "url": "https://opencollective.com/libvips"
1327+ },
1328+ "optionalDependencies": {
1329+ "@img/sharp-libvips-linux-s390x": "1.2.4"
1330+ }
1331+ },
1332+ "node_modules/@img/sharp-linux-x64": {
1333+ "version": "0.34.5",
1334+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
1335+ "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
1336+ "cpu": [
1337+ "x64"
1338+ ],
1339+ "libc": [
1340+ "glibc"
1341+ ],
1342+ "license": "Apache-2.0",
1343+ "optional": true,
1344+ "os": [
1345+ "linux"
1346+ ],
1347+ "engines": {
1348+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1349+ },
1350+ "funding": {
1351+ "url": "https://opencollective.com/libvips"
1352+ },
1353+ "optionalDependencies": {
1354+ "@img/sharp-libvips-linux-x64": "1.2.4"
1355+ }
1356+ },
1357+ "node_modules/@img/sharp-linuxmusl-arm64": {
1358+ "version": "0.34.5",
1359+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
1360+ "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
1361+ "cpu": [
1362+ "arm64"
1363+ ],
1364+ "libc": [
1365+ "musl"
1366+ ],
1367+ "license": "Apache-2.0",
1368+ "optional": true,
1369+ "os": [
1370+ "linux"
1371+ ],
1372+ "engines": {
1373+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1374+ },
1375+ "funding": {
1376+ "url": "https://opencollective.com/libvips"
1377+ },
1378+ "optionalDependencies": {
1379+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
1380+ }
1381+ },
1382+ "node_modules/@img/sharp-linuxmusl-x64": {
1383+ "version": "0.34.5",
1384+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
1385+ "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
1386+ "cpu": [
1387+ "x64"
1388+ ],
1389+ "libc": [
1390+ "musl"
1391+ ],
1392+ "license": "Apache-2.0",
1393+ "optional": true,
1394+ "os": [
1395+ "linux"
1396+ ],
1397+ "engines": {
1398+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1399+ },
1400+ "funding": {
1401+ "url": "https://opencollective.com/libvips"
1402+ },
1403+ "optionalDependencies": {
1404+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
1405+ }
1406+ },
1407+ "node_modules/@img/sharp-wasm32": {
1408+ "version": "0.34.5",
1409+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
1410+ "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
1411+ "cpu": [
1412+ "wasm32"
1413+ ],
1414+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
1415+ "optional": true,
1416+ "dependencies": {
1417+ "@emnapi/runtime": "^1.7.0"
1418+ },
1419+ "engines": {
1420+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1421+ },
1422+ "funding": {
1423+ "url": "https://opencollective.com/libvips"
1424+ }
1425+ },
1426+ "node_modules/@img/sharp-win32-arm64": {
1427+ "version": "0.34.5",
1428+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
1429+ "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
1430+ "cpu": [
1431+ "arm64"
1432+ ],
1433+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1434+ "optional": true,
1435+ "os": [
1436+ "win32"
1437+ ],
1438+ "engines": {
1439+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1440+ },
1441+ "funding": {
1442+ "url": "https://opencollective.com/libvips"
1443+ }
1444+ },
1445+ "node_modules/@img/sharp-win32-ia32": {
1446+ "version": "0.34.5",
1447+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
1448+ "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
1449+ "cpu": [
1450+ "ia32"
1451+ ],
1452+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1453+ "optional": true,
1454+ "os": [
1455+ "win32"
1456+ ],
1457+ "engines": {
1458+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1459+ },
1460+ "funding": {
1461+ "url": "https://opencollective.com/libvips"
1462+ }
1463+ },
1464+ "node_modules/@img/sharp-win32-x64": {
1465+ "version": "0.34.5",
1466+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
1467+ "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
1468+ "cpu": [
1469+ "x64"
1470+ ],
1471+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
1472+ "optional": true,
1473+ "os": [
1474+ "win32"
1475+ ],
1476+ "engines": {
1477+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1478+ },
1479+ "funding": {
1480+ "url": "https://opencollective.com/libvips"
1481+ }
1482+ },
1483+ "node_modules/@jridgewell/gen-mapping": {
1484+ "version": "0.3.13",
1485+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
1486+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
1487+ "dev": true,
1488+ "license": "MIT",
1489+ "dependencies": {
1490+ "@jridgewell/sourcemap-codec": "^1.5.0",
1491+ "@jridgewell/trace-mapping": "^0.3.24"
1492+ }
1493+ },
1494+ "node_modules/@jridgewell/remapping": {
1495+ "version": "2.3.5",
1496+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
1497+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
1498+ "dev": true,
1499+ "license": "MIT",
1500+ "dependencies": {
1501+ "@jridgewell/gen-mapping": "^0.3.5",
1502+ "@jridgewell/trace-mapping": "^0.3.24"
1503+ }
1504+ },
1505+ "node_modules/@jridgewell/resolve-uri": {
1506+ "version": "3.1.2",
1507+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
1508+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
1509+ "dev": true,
1510+ "license": "MIT",
1511+ "engines": {
1512+ "node": ">=6.0.0"
1513+ }
1514+ },
1515+ "node_modules/@jridgewell/sourcemap-codec": {
1516+ "version": "1.5.5",
1517+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
1518+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
1519+ "dev": true,
1520+ "license": "MIT"
1521+ },
1522+ "node_modules/@jridgewell/trace-mapping": {
1523+ "version": "0.3.31",
1524+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
1525+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
1526+ "dev": true,
1527+ "license": "MIT",
1528+ "dependencies": {
1529+ "@jridgewell/resolve-uri": "^3.1.0",
1530+ "@jridgewell/sourcemap-codec": "^1.4.14"
1531+ }
1532+ },
1533+ "node_modules/@napi-rs/wasm-runtime": {
1534+ "version": "1.2.2",
1535+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz",
1536+ "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==",
1537+ "dev": true,
1538+ "license": "MIT",
1539+ "optional": true,
1540+ "dependencies": {
1541+ "@tybys/wasm-util": "^0.10.3"
1542+ },
1543+ "engines": {
1544+ "node": "^20.19.0 || ^22.13.0 || >=23.5.0"
1545+ },
1546+ "funding": {
1547+ "type": "github",
1548+ "url": "https://github.com/sponsors/Brooooooklyn"
1549+ },
1550+ "peerDependencies": {
1551+ "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3",
1552+ "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3"
1553+ }
1554+ },
1555+ "node_modules/@next/env": {
1556+ "version": "16.2.12",
1557+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.12.tgz",
1558+ "integrity": "sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==",
1559+ "license": "MIT"
1560+ },
1561+ "node_modules/@next/eslint-plugin-next": {
1562+ "version": "16.2.12",
1563+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.2.12.tgz",
1564+ "integrity": "sha512-uF2z/qAK2q7B5/6CpnFcBRX6jOq5iCO+Uqh1UkJhXljX1JwLarLYhhoJadO6dPb6moTprOKewMXheBcbIoSbug==",
1565+ "dev": true,
1566+ "license": "MIT",
1567+ "dependencies": {
1568+ "fast-glob": "3.3.1"
1569+ }
1570+ },
1571+ "node_modules/@next/swc-darwin-arm64": {
1572+ "version": "16.2.12",
1573+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.12.tgz",
1574+ "integrity": "sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==",
1575+ "cpu": [
1576+ "arm64"
1577+ ],
1578+ "license": "MIT",
1579+ "optional": true,
1580+ "os": [
1581+ "darwin"
1582+ ],
1583+ "engines": {
1584+ "node": ">= 10"
1585+ }
1586+ },
1587+ "node_modules/@next/swc-darwin-x64": {
1588+ "version": "16.2.12",
1589+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.12.tgz",
1590+ "integrity": "sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==",
1591+ "cpu": [
1592+ "x64"
1593+ ],
1594+ "license": "MIT",
1595+ "optional": true,
1596+ "os": [
1597+ "darwin"
1598+ ],
1599+ "engines": {
1600+ "node": ">= 10"
1601+ }
1602+ },
1603+ "node_modules/@next/swc-linux-arm64-gnu": {
1604+ "version": "16.2.12",
1605+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.12.tgz",
1606+ "integrity": "sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==",
1607+ "cpu": [
1608+ "arm64"
1609+ ],
1610+ "libc": [
1611+ "glibc"
1612+ ],
1613+ "license": "MIT",
1614+ "optional": true,
1615+ "os": [
1616+ "linux"
1617+ ],
1618+ "engines": {
1619+ "node": ">= 10"
1620+ }
1621+ },
1622+ "node_modules/@next/swc-linux-arm64-musl": {
1623+ "version": "16.2.12",
1624+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.12.tgz",
1625+ "integrity": "sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==",
1626+ "cpu": [
1627+ "arm64"
1628+ ],
1629+ "libc": [
1630+ "musl"
1631+ ],
1632+ "license": "MIT",
1633+ "optional": true,
1634+ "os": [
1635+ "linux"
1636+ ],
1637+ "engines": {
1638+ "node": ">= 10"
1639+ }
1640+ },
1641+ "node_modules/@next/swc-linux-x64-gnu": {
1642+ "version": "16.2.12",
1643+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.12.tgz",
1644+ "integrity": "sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==",
1645+ "cpu": [
1646+ "x64"
1647+ ],
1648+ "libc": [
1649+ "glibc"
1650+ ],
1651+ "license": "MIT",
1652+ "optional": true,
1653+ "os": [
1654+ "linux"
1655+ ],
1656+ "engines": {
1657+ "node": ">= 10"
1658+ }
1659+ },
1660+ "node_modules/@next/swc-linux-x64-musl": {
1661+ "version": "16.2.12",
1662+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.12.tgz",
1663+ "integrity": "sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==",
1664+ "cpu": [
1665+ "x64"
1666+ ],
1667+ "libc": [
1668+ "musl"
1669+ ],
1670+ "license": "MIT",
1671+ "optional": true,
1672+ "os": [
1673+ "linux"
1674+ ],
1675+ "engines": {
1676+ "node": ">= 10"
1677+ }
1678+ },
1679+ "node_modules/@next/swc-win32-arm64-msvc": {
1680+ "version": "16.2.12",
1681+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.12.tgz",
1682+ "integrity": "sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==",
1683+ "cpu": [
1684+ "arm64"
1685+ ],
1686+ "license": "MIT",
1687+ "optional": true,
1688+ "os": [
1689+ "win32"
1690+ ],
1691+ "engines": {
1692+ "node": ">= 10"
1693+ }
1694+ },
1695+ "node_modules/@next/swc-win32-x64-msvc": {
1696+ "version": "16.2.12",
1697+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.12.tgz",
1698+ "integrity": "sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==",
1699+ "cpu": [
1700+ "x64"
1701+ ],
1702+ "license": "MIT",
1703+ "optional": true,
1704+ "os": [
1705+ "win32"
1706+ ],
1707+ "engines": {
1708+ "node": ">= 10"
1709+ }
1710+ },
1711+ "node_modules/@nodelib/fs.scandir": {
1712+ "version": "2.1.5",
1713+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
1714+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
1715+ "dev": true,
1716+ "license": "MIT",
1717+ "dependencies": {
1718+ "@nodelib/fs.stat": "2.0.5",
1719+ "run-parallel": "^1.1.9"
1720+ },
1721+ "engines": {
1722+ "node": ">= 8"
1723+ }
1724+ },
1725+ "node_modules/@nodelib/fs.stat": {
1726+ "version": "2.0.5",
1727+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
1728+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
1729+ "dev": true,
1730+ "license": "MIT",
1731+ "engines": {
1732+ "node": ">= 8"
1733+ }
1734+ },
1735+ "node_modules/@nodelib/fs.walk": {
1736+ "version": "1.2.8",
1737+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
1738+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
1739+ "dev": true,
1740+ "license": "MIT",
1741+ "dependencies": {
1742+ "@nodelib/fs.scandir": "2.1.5",
1743+ "fastq": "^1.6.0"
1744+ },
1745+ "engines": {
1746+ "node": ">= 8"
1747+ }
1748+ },
1749+ "node_modules/@nolyfill/is-core-module": {
1750+ "version": "1.0.39",
1751+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
1752+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
1753+ "dev": true,
1754+ "license": "MIT",
1755+ "engines": {
1756+ "node": ">=12.4.0"
1757+ }
1758+ },
1759+ "node_modules/@rtsao/scc": {
1760+ "version": "1.1.0",
1761+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
1762+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
1763+ "dev": true,
1764+ "license": "MIT"
1765+ },
1766+ "node_modules/@swc/helpers": {
1767+ "version": "0.5.15",
1768+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
1769+ "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
1770+ "license": "Apache-2.0",
1771+ "dependencies": {
1772+ "tslib": "^2.8.0"
1773+ }
1774+ },
1775+ "node_modules/@tailwindcss/node": {
1776+ "version": "4.3.3",
1777+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz",
1778+ "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==",
1779+ "dev": true,
1780+ "license": "MIT",
1781+ "dependencies": {
1782+ "@jridgewell/remapping": "^2.3.5",
1783+ "enhanced-resolve": "^5.24.1",
1784+ "jiti": "^2.7.0",
1785+ "lightningcss": "1.32.0",
1786+ "magic-string": "^0.30.21",
1787+ "source-map-js": "^1.2.1",
1788+ "tailwindcss": "4.3.3"
1789+ }
1790+ },
1791+ "node_modules/@tailwindcss/oxide": {
1792+ "version": "4.3.3",
1793+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz",
1794+ "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==",
1795+ "dev": true,
1796+ "license": "MIT",
1797+ "engines": {
1798+ "node": ">= 20"
1799+ },
1800+ "optionalDependencies": {
1801+ "@tailwindcss/oxide-android-arm64": "4.3.3",
1802+ "@tailwindcss/oxide-darwin-arm64": "4.3.3",
1803+ "@tailwindcss/oxide-darwin-x64": "4.3.3",
1804+ "@tailwindcss/oxide-freebsd-x64": "4.3.3",
1805+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3",
1806+ "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3",
1807+ "@tailwindcss/oxide-linux-arm64-musl": "4.3.3",
1808+ "@tailwindcss/oxide-linux-x64-gnu": "4.3.3",
1809+ "@tailwindcss/oxide-linux-x64-musl": "4.3.3",
1810+ "@tailwindcss/oxide-wasm32-wasi": "4.3.3",
1811+ "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3",
1812+ "@tailwindcss/oxide-win32-x64-msvc": "4.3.3"
1813+ }
1814+ },
1815+ "node_modules/@tailwindcss/oxide-android-arm64": {
1816+ "version": "4.3.3",
1817+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz",
1818+ "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==",
1819+ "cpu": [
1820+ "arm64"
1821+ ],
1822+ "dev": true,
1823+ "license": "MIT",
1824+ "optional": true,
1825+ "os": [
1826+ "android"
1827+ ],
1828+ "engines": {
1829+ "node": ">= 20"
1830+ }
1831+ },
1832+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
1833+ "version": "4.3.3",
1834+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz",
1835+ "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==",
1836+ "cpu": [
1837+ "arm64"
1838+ ],
1839+ "dev": true,
1840+ "license": "MIT",
1841+ "optional": true,
1842+ "os": [
1843+ "darwin"
1844+ ],
1845+ "engines": {
1846+ "node": ">= 20"
1847+ }
1848+ },
1849+ "node_modules/@tailwindcss/oxide-darwin-x64": {
1850+ "version": "4.3.3",
1851+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz",
1852+ "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==",
1853+ "cpu": [
1854+ "x64"
1855+ ],
1856+ "dev": true,
1857+ "license": "MIT",
1858+ "optional": true,
1859+ "os": [
1860+ "darwin"
1861+ ],
1862+ "engines": {
1863+ "node": ">= 20"
1864+ }
1865+ },
1866+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
1867+ "version": "4.3.3",
1868+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz",
1869+ "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==",
1870+ "cpu": [
1871+ "x64"
1872+ ],
1873+ "dev": true,
1874+ "license": "MIT",
1875+ "optional": true,
1876+ "os": [
1877+ "freebsd"
1878+ ],
1879+ "engines": {
1880+ "node": ">= 20"
1881+ }
1882+ },
1883+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
1884+ "version": "4.3.3",
1885+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz",
1886+ "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==",
1887+ "cpu": [
1888+ "arm"
1889+ ],
1890+ "dev": true,
1891+ "license": "MIT",
1892+ "optional": true,
1893+ "os": [
1894+ "linux"
1895+ ],
1896+ "engines": {
1897+ "node": ">= 20"
1898+ }
1899+ },
1900+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
1901+ "version": "4.3.3",
1902+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz",
1903+ "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==",
1904+ "cpu": [
1905+ "arm64"
1906+ ],
1907+ "dev": true,
1908+ "libc": [
1909+ "glibc"
1910+ ],
1911+ "license": "MIT",
1912+ "optional": true,
1913+ "os": [
1914+ "linux"
1915+ ],
1916+ "engines": {
1917+ "node": ">= 20"
1918+ }
1919+ },
1920+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
1921+ "version": "4.3.3",
1922+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz",
1923+ "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==",
1924+ "cpu": [
1925+ "arm64"
1926+ ],
1927+ "dev": true,
1928+ "libc": [
1929+ "musl"
1930+ ],
1931+ "license": "MIT",
1932+ "optional": true,
1933+ "os": [
1934+ "linux"
1935+ ],
1936+ "engines": {
1937+ "node": ">= 20"
1938+ }
1939+ },
1940+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1941+ "version": "4.3.3",
1942+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz",
1943+ "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==",
1944+ "cpu": [
1945+ "x64"
1946+ ],
1947+ "dev": true,
1948+ "libc": [
1949+ "glibc"
1950+ ],
1951+ "license": "MIT",
1952+ "optional": true,
1953+ "os": [
1954+ "linux"
1955+ ],
1956+ "engines": {
1957+ "node": ">= 20"
1958+ }
1959+ },
1960+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
1961+ "version": "4.3.3",
1962+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz",
1963+ "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==",
1964+ "cpu": [
1965+ "x64"
1966+ ],
1967+ "dev": true,
1968+ "libc": [
1969+ "musl"
1970+ ],
1971+ "license": "MIT",
1972+ "optional": true,
1973+ "os": [
1974+ "linux"
1975+ ],
1976+ "engines": {
1977+ "node": ">= 20"
1978+ }
1979+ },
1980+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
1981+ "version": "4.3.3",
1982+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz",
1983+ "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==",
1984+ "bundleDependencies": [
1985+ "@napi-rs/wasm-runtime",
1986+ "@emnapi/core",
1987+ "@emnapi/runtime",
1988+ "@tybys/wasm-util",
1989+ "@emnapi/wasi-threads",
1990+ "tslib"
1991+ ],
1992+ "cpu": [
1993+ "wasm32"
1994+ ],
1995+ "dev": true,
1996+ "license": "MIT",
1997+ "optional": true,
1998+ "dependencies": {
1999+ "@emnapi/core": "^1.11.1",
2000+ "@emnapi/runtime": "^1.11.1",
2001+ "@emnapi/wasi-threads": "^1.2.2",
2002+ "@napi-rs/wasm-runtime": "^1.1.4",
2003+ "@tybys/wasm-util": "^0.10.2",
2004+ "tslib": "^2.8.1"
2005+ },
2006+ "engines": {
2007+ "node": ">=14.0.0"
2008+ }
2009+ },
2010+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
2011+ "version": "4.3.3",
2012+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz",
2013+ "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==",
2014+ "cpu": [
2015+ "arm64"
2016+ ],
2017+ "dev": true,
2018+ "license": "MIT",
2019+ "optional": true,
2020+ "os": [
2021+ "win32"
2022+ ],
2023+ "engines": {
2024+ "node": ">= 20"
2025+ }
2026+ },
2027+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
2028+ "version": "4.3.3",
2029+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz",
2030+ "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==",
2031+ "cpu": [
2032+ "x64"
2033+ ],
2034+ "dev": true,
2035+ "license": "MIT",
2036+ "optional": true,
2037+ "os": [
2038+ "win32"
2039+ ],
2040+ "engines": {
2041+ "node": ">= 20"
2042+ }
2043+ },
2044+ "node_modules/@tailwindcss/postcss": {
2045+ "version": "4.3.3",
2046+ "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.3.3.tgz",
2047+ "integrity": "sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==",
2048+ "dev": true,
2049+ "license": "MIT",
2050+ "dependencies": {
2051+ "@alloc/quick-lru": "^5.2.0",
2052+ "@tailwindcss/node": "4.3.3",
2053+ "@tailwindcss/oxide": "4.3.3",
2054+ "postcss": "^8.5.16",
2055+ "tailwindcss": "4.3.3"
2056+ }
2057+ },
2058+ "node_modules/@tybys/wasm-util": {
2059+ "version": "0.10.3",
2060+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
2061+ "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==",
2062+ "dev": true,
2063+ "license": "MIT",
2064+ "optional": true,
2065+ "dependencies": {
2066+ "tslib": "^2.4.0"
2067+ }
2068+ },
2069+ "node_modules/@types/estree": {
2070+ "version": "1.0.9",
2071+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
2072+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
2073+ "dev": true,
2074+ "license": "MIT"
2075+ },
2076+ "node_modules/@types/json-schema": {
2077+ "version": "7.0.15",
2078+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
2079+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
2080+ "dev": true,
2081+ "license": "MIT"
2082+ },
2083+ "node_modules/@types/json5": {
2084+ "version": "0.0.29",
2085+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
2086+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
2087+ "dev": true,
2088+ "license": "MIT"
2089+ },
2090+ "node_modules/@types/node": {
2091+ "version": "22.20.1",
2092+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz",
2093+ "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==",
2094+ "dev": true,
2095+ "license": "MIT",
2096+ "dependencies": {
2097+ "undici-types": "~6.21.0"
2098+ }
2099+ },
2100+ "node_modules/@types/react": {
2101+ "version": "19.2.18",
2102+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz",
2103+ "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==",
2104+ "dev": true,
2105+ "license": "MIT",
2106+ "dependencies": {
2107+ "csstype": "^3.2.2"
2108+ }
2109+ },
2110+ "node_modules/@types/react-dom": {
2111+ "version": "19.2.4",
2112+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.4.tgz",
2113+ "integrity": "sha512-Bsc+QHgp+P/F02XDzNCY9jnZNCUuLki36KT7VKrTXXLdHf+vHMNZnW1rVu5DNW/rCK+fya3DATySbLM4yhtKUw==",
2114+ "dev": true,
2115+ "license": "MIT",
2116+ "peerDependencies": {
2117+ "@types/react": "^19.2.0"
2118+ }
2119+ },
2120+ "node_modules/@typescript-eslint/eslint-plugin": {
2121+ "version": "8.65.0",
2122+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz",
2123+ "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==",
2124+ "dev": true,
2125+ "license": "MIT",
2126+ "dependencies": {
2127+ "@eslint-community/regexpp": "^4.12.2",
2128+ "@typescript-eslint/scope-manager": "8.65.0",
2129+ "@typescript-eslint/type-utils": "8.65.0",
2130+ "@typescript-eslint/utils": "8.65.0",
2131+ "@typescript-eslint/visitor-keys": "8.65.0",
2132+ "ignore": "^7.0.5",
2133+ "natural-compare": "^1.4.0",
2134+ "ts-api-utils": "^2.5.0"
2135+ },
2136+ "engines": {
2137+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2138+ },
2139+ "funding": {
2140+ "type": "opencollective",
2141+ "url": "https://opencollective.com/typescript-eslint"
2142+ },
2143+ "peerDependencies": {
2144+ "@typescript-eslint/parser": "^8.65.0",
2145+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2146+ "typescript": ">=4.8.4 <6.1.0"
2147+ }
2148+ },
2149+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
2150+ "version": "7.0.6",
2151+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz",
2152+ "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==",
2153+ "dev": true,
2154+ "license": "MIT",
2155+ "engines": {
2156+ "node": ">= 4"
2157+ }
2158+ },
2159+ "node_modules/@typescript-eslint/parser": {
2160+ "version": "8.65.0",
2161+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz",
2162+ "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==",
2163+ "dev": true,
2164+ "license": "MIT",
2165+ "dependencies": {
2166+ "@typescript-eslint/scope-manager": "8.65.0",
2167+ "@typescript-eslint/types": "8.65.0",
2168+ "@typescript-eslint/typescript-estree": "8.65.0",
2169+ "@typescript-eslint/visitor-keys": "8.65.0",
2170+ "debug": "^4.4.3"
2171+ },
2172+ "engines": {
2173+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2174+ },
2175+ "funding": {
2176+ "type": "opencollective",
2177+ "url": "https://opencollective.com/typescript-eslint"
2178+ },
2179+ "peerDependencies": {
2180+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2181+ "typescript": ">=4.8.4 <6.1.0"
2182+ }
2183+ },
2184+ "node_modules/@typescript-eslint/project-service": {
2185+ "version": "8.65.0",
2186+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz",
2187+ "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==",
2188+ "dev": true,
2189+ "license": "MIT",
2190+ "dependencies": {
2191+ "@typescript-eslint/tsconfig-utils": "^8.65.0",
2192+ "@typescript-eslint/types": "^8.65.0",
2193+ "debug": "^4.4.3"
2194+ },
2195+ "engines": {
2196+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2197+ },
2198+ "funding": {
2199+ "type": "opencollective",
2200+ "url": "https://opencollective.com/typescript-eslint"
2201+ },
2202+ "peerDependencies": {
2203+ "typescript": ">=4.8.4 <6.1.0"
2204+ }
2205+ },
2206+ "node_modules/@typescript-eslint/scope-manager": {
2207+ "version": "8.65.0",
2208+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz",
2209+ "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==",
2210+ "dev": true,
2211+ "license": "MIT",
2212+ "dependencies": {
2213+ "@typescript-eslint/types": "8.65.0",
2214+ "@typescript-eslint/visitor-keys": "8.65.0"
2215+ },
2216+ "engines": {
2217+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2218+ },
2219+ "funding": {
2220+ "type": "opencollective",
2221+ "url": "https://opencollective.com/typescript-eslint"
2222+ }
2223+ },
2224+ "node_modules/@typescript-eslint/tsconfig-utils": {
2225+ "version": "8.65.0",
2226+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz",
2227+ "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==",
2228+ "dev": true,
2229+ "license": "MIT",
2230+ "engines": {
2231+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2232+ },
2233+ "funding": {
2234+ "type": "opencollective",
2235+ "url": "https://opencollective.com/typescript-eslint"
2236+ },
2237+ "peerDependencies": {
2238+ "typescript": ">=4.8.4 <6.1.0"
2239+ }
2240+ },
2241+ "node_modules/@typescript-eslint/type-utils": {
2242+ "version": "8.65.0",
2243+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz",
2244+ "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==",
2245+ "dev": true,
2246+ "license": "MIT",
2247+ "dependencies": {
2248+ "@typescript-eslint/types": "8.65.0",
2249+ "@typescript-eslint/typescript-estree": "8.65.0",
2250+ "@typescript-eslint/utils": "8.65.0",
2251+ "debug": "^4.4.3",
2252+ "ts-api-utils": "^2.5.0"
2253+ },
2254+ "engines": {
2255+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2256+ },
2257+ "funding": {
2258+ "type": "opencollective",
2259+ "url": "https://opencollective.com/typescript-eslint"
2260+ },
2261+ "peerDependencies": {
2262+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2263+ "typescript": ">=4.8.4 <6.1.0"
2264+ }
2265+ },
2266+ "node_modules/@typescript-eslint/types": {
2267+ "version": "8.65.0",
2268+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz",
2269+ "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==",
2270+ "dev": true,
2271+ "license": "MIT",
2272+ "engines": {
2273+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2274+ },
2275+ "funding": {
2276+ "type": "opencollective",
2277+ "url": "https://opencollective.com/typescript-eslint"
2278+ }
2279+ },
2280+ "node_modules/@typescript-eslint/typescript-estree": {
2281+ "version": "8.65.0",
2282+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz",
2283+ "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==",
2284+ "dev": true,
2285+ "license": "MIT",
2286+ "dependencies": {
2287+ "@typescript-eslint/project-service": "8.65.0",
2288+ "@typescript-eslint/tsconfig-utils": "8.65.0",
2289+ "@typescript-eslint/types": "8.65.0",
2290+ "@typescript-eslint/visitor-keys": "8.65.0",
2291+ "debug": "^4.4.3",
2292+ "minimatch": "^10.2.2",
2293+ "semver": "^7.7.3",
2294+ "tinyglobby": "^0.2.15",
2295+ "ts-api-utils": "^2.5.0"
2296+ },
2297+ "engines": {
2298+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2299+ },
2300+ "funding": {
2301+ "type": "opencollective",
2302+ "url": "https://opencollective.com/typescript-eslint"
2303+ },
2304+ "peerDependencies": {
2305+ "typescript": ">=4.8.4 <6.1.0"
2306+ }
2307+ },
2308+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
2309+ "version": "4.0.4",
2310+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
2311+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
2312+ "dev": true,
2313+ "license": "MIT",
2314+ "engines": {
2315+ "node": "18 || 20 || >=22"
2316+ }
2317+ },
2318+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
2319+ "version": "5.0.9",
2320+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
2321+ "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
2322+ "dev": true,
2323+ "license": "MIT",
2324+ "dependencies": {
2325+ "balanced-match": "^4.0.2"
2326+ },
2327+ "engines": {
2328+ "node": "20 || >=22"
2329+ }
2330+ },
2331+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
2332+ "version": "10.2.6",
2333+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
2334+ "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
2335+ "dev": true,
2336+ "license": "BlueOak-1.0.0",
2337+ "dependencies": {
2338+ "brace-expansion": "^5.0.8"
2339+ },
2340+ "engines": {
2341+ "node": "18 || 20 || >=22"
2342+ },
2343+ "funding": {
2344+ "url": "https://github.com/sponsors/isaacs"
2345+ }
2346+ },
2347+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
2348+ "version": "7.8.5",
2349+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
2350+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
2351+ "dev": true,
2352+ "license": "ISC",
2353+ "bin": {
2354+ "semver": "bin/semver.js"
2355+ },
2356+ "engines": {
2357+ "node": ">=10"
2358+ }
2359+ },
2360+ "node_modules/@typescript-eslint/utils": {
2361+ "version": "8.65.0",
2362+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz",
2363+ "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==",
2364+ "dev": true,
2365+ "license": "MIT",
2366+ "dependencies": {
2367+ "@eslint-community/eslint-utils": "^4.9.1",
2368+ "@typescript-eslint/scope-manager": "8.65.0",
2369+ "@typescript-eslint/types": "8.65.0",
2370+ "@typescript-eslint/typescript-estree": "8.65.0"
2371+ },
2372+ "engines": {
2373+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2374+ },
2375+ "funding": {
2376+ "type": "opencollective",
2377+ "url": "https://opencollective.com/typescript-eslint"
2378+ },
2379+ "peerDependencies": {
2380+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
2381+ "typescript": ">=4.8.4 <6.1.0"
2382+ }
2383+ },
2384+ "node_modules/@typescript-eslint/visitor-keys": {
2385+ "version": "8.65.0",
2386+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz",
2387+ "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==",
2388+ "dev": true,
2389+ "license": "MIT",
2390+ "dependencies": {
2391+ "@typescript-eslint/types": "8.65.0",
2392+ "eslint-visitor-keys": "^5.0.0"
2393+ },
2394+ "engines": {
2395+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2396+ },
2397+ "funding": {
2398+ "type": "opencollective",
2399+ "url": "https://opencollective.com/typescript-eslint"
2400+ }
2401+ },
2402+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
2403+ "version": "5.0.1",
2404+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
2405+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
2406+ "dev": true,
2407+ "license": "Apache-2.0",
2408+ "engines": {
2409+ "node": "^20.19.0 || ^22.13.0 || >=24"
2410+ },
2411+ "funding": {
2412+ "url": "https://opencollective.com/eslint"
2413+ }
2414+ },
2415+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
2416+ "version": "1.12.2",
2417+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz",
2418+ "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==",
2419+ "cpu": [
2420+ "arm"
2421+ ],
2422+ "dev": true,
2423+ "license": "MIT",
2424+ "optional": true,
2425+ "os": [
2426+ "android"
2427+ ]
2428+ },
2429+ "node_modules/@unrs/resolver-binding-android-arm64": {
2430+ "version": "1.12.2",
2431+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz",
2432+ "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==",
2433+ "cpu": [
2434+ "arm64"
2435+ ],
2436+ "dev": true,
2437+ "license": "MIT",
2438+ "optional": true,
2439+ "os": [
2440+ "android"
2441+ ]
2442+ },
2443+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
2444+ "version": "1.12.2",
2445+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz",
2446+ "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==",
2447+ "cpu": [
2448+ "arm64"
2449+ ],
2450+ "dev": true,
2451+ "license": "MIT",
2452+ "optional": true,
2453+ "os": [
2454+ "darwin"
2455+ ]
2456+ },
2457+ "node_modules/@unrs/resolver-binding-darwin-x64": {
2458+ "version": "1.12.2",
2459+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz",
2460+ "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==",
2461+ "cpu": [
2462+ "x64"
2463+ ],
2464+ "dev": true,
2465+ "license": "MIT",
2466+ "optional": true,
2467+ "os": [
2468+ "darwin"
2469+ ]
2470+ },
2471+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
2472+ "version": "1.12.2",
2473+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz",
2474+ "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==",
2475+ "cpu": [
2476+ "x64"
2477+ ],
2478+ "dev": true,
2479+ "license": "MIT",
2480+ "optional": true,
2481+ "os": [
2482+ "freebsd"
2483+ ]
2484+ },
2485+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
2486+ "version": "1.12.2",
2487+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz",
2488+ "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==",
2489+ "cpu": [
2490+ "arm"
2491+ ],
2492+ "dev": true,
2493+ "license": "MIT",
2494+ "optional": true,
2495+ "os": [
2496+ "linux"
2497+ ]
2498+ },
2499+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
2500+ "version": "1.12.2",
2501+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz",
2502+ "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==",
2503+ "cpu": [
2504+ "arm"
2505+ ],
2506+ "dev": true,
2507+ "license": "MIT",
2508+ "optional": true,
2509+ "os": [
2510+ "linux"
2511+ ]
2512+ },
2513+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
2514+ "version": "1.12.2",
2515+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz",
2516+ "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==",
2517+ "cpu": [
2518+ "arm64"
2519+ ],
2520+ "dev": true,
2521+ "libc": [
2522+ "glibc"
2523+ ],
2524+ "license": "MIT",
2525+ "optional": true,
2526+ "os": [
2527+ "linux"
2528+ ]
2529+ },
2530+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
2531+ "version": "1.12.2",
2532+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz",
2533+ "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==",
2534+ "cpu": [
2535+ "arm64"
2536+ ],
2537+ "dev": true,
2538+ "libc": [
2539+ "musl"
2540+ ],
2541+ "license": "MIT",
2542+ "optional": true,
2543+ "os": [
2544+ "linux"
2545+ ]
2546+ },
2547+ "node_modules/@unrs/resolver-binding-linux-loong64-gnu": {
2548+ "version": "1.12.2",
2549+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz",
2550+ "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==",
2551+ "cpu": [
2552+ "loong64"
2553+ ],
2554+ "dev": true,
2555+ "libc": [
2556+ "glibc"
2557+ ],
2558+ "license": "MIT",
2559+ "optional": true,
2560+ "os": [
2561+ "linux"
2562+ ]
2563+ },
2564+ "node_modules/@unrs/resolver-binding-linux-loong64-musl": {
2565+ "version": "1.12.2",
2566+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz",
2567+ "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==",
2568+ "cpu": [
2569+ "loong64"
2570+ ],
2571+ "dev": true,
2572+ "libc": [
2573+ "musl"
2574+ ],
2575+ "license": "MIT",
2576+ "optional": true,
2577+ "os": [
2578+ "linux"
2579+ ]
2580+ },
2581+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
2582+ "version": "1.12.2",
2583+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz",
2584+ "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==",
2585+ "cpu": [
2586+ "ppc64"
2587+ ],
2588+ "dev": true,
2589+ "libc": [
2590+ "glibc"
2591+ ],
2592+ "license": "MIT",
2593+ "optional": true,
2594+ "os": [
2595+ "linux"
2596+ ]
2597+ },
2598+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
2599+ "version": "1.12.2",
2600+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz",
2601+ "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==",
2602+ "cpu": [
2603+ "riscv64"
2604+ ],
2605+ "dev": true,
2606+ "libc": [
2607+ "glibc"
2608+ ],
2609+ "license": "MIT",
2610+ "optional": true,
2611+ "os": [
2612+ "linux"
2613+ ]
2614+ },
2615+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
2616+ "version": "1.12.2",
2617+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz",
2618+ "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==",
2619+ "cpu": [
2620+ "riscv64"
2621+ ],
2622+ "dev": true,
2623+ "libc": [
2624+ "musl"
2625+ ],
2626+ "license": "MIT",
2627+ "optional": true,
2628+ "os": [
2629+ "linux"
2630+ ]
2631+ },
2632+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
2633+ "version": "1.12.2",
2634+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz",
2635+ "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==",
2636+ "cpu": [
2637+ "s390x"
2638+ ],
2639+ "dev": true,
2640+ "libc": [
2641+ "glibc"
2642+ ],
2643+ "license": "MIT",
2644+ "optional": true,
2645+ "os": [
2646+ "linux"
2647+ ]
2648+ },
2649+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
2650+ "version": "1.12.2",
2651+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz",
2652+ "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==",
2653+ "cpu": [
2654+ "x64"
2655+ ],
2656+ "dev": true,
2657+ "libc": [
2658+ "glibc"
2659+ ],
2660+ "license": "MIT",
2661+ "optional": true,
2662+ "os": [
2663+ "linux"
2664+ ]
2665+ },
2666+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
2667+ "version": "1.12.2",
2668+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz",
2669+ "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==",
2670+ "cpu": [
2671+ "x64"
2672+ ],
2673+ "dev": true,
2674+ "libc": [
2675+ "musl"
2676+ ],
2677+ "license": "MIT",
2678+ "optional": true,
2679+ "os": [
2680+ "linux"
2681+ ]
2682+ },
2683+ "node_modules/@unrs/resolver-binding-openharmony-arm64": {
2684+ "version": "1.12.2",
2685+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz",
2686+ "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==",
2687+ "cpu": [
2688+ "arm64"
2689+ ],
2690+ "dev": true,
2691+ "license": "MIT",
2692+ "optional": true,
2693+ "os": [
2694+ "openharmony"
2695+ ]
2696+ },
2697+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
2698+ "version": "1.12.2",
2699+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz",
2700+ "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==",
2701+ "cpu": [
2702+ "wasm32"
2703+ ],
2704+ "dev": true,
2705+ "license": "MIT",
2706+ "optional": true,
2707+ "dependencies": {
2708+ "@emnapi/core": "1.10.0",
2709+ "@emnapi/runtime": "1.10.0",
2710+ "@napi-rs/wasm-runtime": "^1.1.4"
2711+ },
2712+ "engines": {
2713+ "node": ">=14.0.0"
2714+ }
2715+ },
2716+ "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@emnapi/runtime": {
2717+ "version": "1.10.0",
2718+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
2719+ "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
2720+ "dev": true,
2721+ "license": "MIT",
2722+ "optional": true,
2723+ "dependencies": {
2724+ "tslib": "^2.4.0"
2725+ }
2726+ },
2727+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
2728+ "version": "1.12.2",
2729+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz",
2730+ "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==",
2731+ "cpu": [
2732+ "arm64"
2733+ ],
2734+ "dev": true,
2735+ "license": "MIT",
2736+ "optional": true,
2737+ "os": [
2738+ "win32"
2739+ ]
2740+ },
2741+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
2742+ "version": "1.12.2",
2743+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz",
2744+ "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==",
2745+ "cpu": [
2746+ "ia32"
2747+ ],
2748+ "dev": true,
2749+ "license": "MIT",
2750+ "optional": true,
2751+ "os": [
2752+ "win32"
2753+ ]
2754+ },
2755+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
2756+ "version": "1.12.2",
2757+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz",
2758+ "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==",
2759+ "cpu": [
2760+ "x64"
2761+ ],
2762+ "dev": true,
2763+ "license": "MIT",
2764+ "optional": true,
2765+ "os": [
2766+ "win32"
2767+ ]
2768+ },
2769+ "node_modules/acorn": {
2770+ "version": "8.18.0",
2771+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
2772+ "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
2773+ "dev": true,
2774+ "license": "MIT",
2775+ "bin": {
2776+ "acorn": "bin/acorn"
2777+ },
2778+ "engines": {
2779+ "node": ">=0.4.0"
2780+ }
2781+ },
2782+ "node_modules/acorn-jsx": {
2783+ "version": "5.3.2",
2784+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
2785+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
2786+ "dev": true,
2787+ "license": "MIT",
2788+ "peerDependencies": {
2789+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
2790+ }
2791+ },
2792+ "node_modules/ajv": {
2793+ "version": "6.15.0",
2794+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
2795+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
2796+ "dev": true,
2797+ "license": "MIT",
2798+ "dependencies": {
2799+ "fast-deep-equal": "^3.1.1",
2800+ "fast-json-stable-stringify": "^2.0.0",
2801+ "json-schema-traverse": "^0.4.1",
2802+ "uri-js": "^4.2.2"
2803+ },
2804+ "funding": {
2805+ "type": "github",
2806+ "url": "https://github.com/sponsors/epoberezkin"
2807+ }
2808+ },
2809+ "node_modules/ansi-styles": {
2810+ "version": "4.3.0",
2811+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2812+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2813+ "dev": true,
2814+ "license": "MIT",
2815+ "dependencies": {
2816+ "color-convert": "^2.0.1"
2817+ },
2818+ "engines": {
2819+ "node": ">=8"
2820+ },
2821+ "funding": {
2822+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2823+ }
2824+ },
2825+ "node_modules/argparse": {
2826+ "version": "2.0.1",
2827+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2828+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2829+ "dev": true,
2830+ "license": "Python-2.0"
2831+ },
2832+ "node_modules/aria-query": {
2833+ "version": "5.3.2",
2834+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
2835+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
2836+ "dev": true,
2837+ "license": "Apache-2.0",
2838+ "engines": {
2839+ "node": ">= 0.4"
2840+ }
2841+ },
2842+ "node_modules/array-buffer-byte-length": {
2843+ "version": "1.0.2",
2844+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
2845+ "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
2846+ "dev": true,
2847+ "license": "MIT",
2848+ "dependencies": {
2849+ "call-bound": "^1.0.3",
2850+ "is-array-buffer": "^3.0.5"
2851+ },
2852+ "engines": {
2853+ "node": ">= 0.4"
2854+ },
2855+ "funding": {
2856+ "url": "https://github.com/sponsors/ljharb"
2857+ }
2858+ },
2859+ "node_modules/array-includes": {
2860+ "version": "3.1.9",
2861+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
2862+ "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
2863+ "dev": true,
2864+ "license": "MIT",
2865+ "dependencies": {
2866+ "call-bind": "^1.0.8",
2867+ "call-bound": "^1.0.4",
2868+ "define-properties": "^1.2.1",
2869+ "es-abstract": "^1.24.0",
2870+ "es-object-atoms": "^1.1.1",
2871+ "get-intrinsic": "^1.3.0",
2872+ "is-string": "^1.1.1",
2873+ "math-intrinsics": "^1.1.0"
2874+ },
2875+ "engines": {
2876+ "node": ">= 0.4"
2877+ },
2878+ "funding": {
2879+ "url": "https://github.com/sponsors/ljharb"
2880+ }
2881+ },
2882+ "node_modules/array.prototype.findlast": {
2883+ "version": "1.2.5",
2884+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
2885+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
2886+ "dev": true,
2887+ "license": "MIT",
2888+ "dependencies": {
2889+ "call-bind": "^1.0.7",
2890+ "define-properties": "^1.2.1",
2891+ "es-abstract": "^1.23.2",
2892+ "es-errors": "^1.3.0",
2893+ "es-object-atoms": "^1.0.0",
2894+ "es-shim-unscopables": "^1.0.2"
2895+ },
2896+ "engines": {
2897+ "node": ">= 0.4"
2898+ },
2899+ "funding": {
2900+ "url": "https://github.com/sponsors/ljharb"
2901+ }
2902+ },
2903+ "node_modules/array.prototype.findlastindex": {
2904+ "version": "1.2.6",
2905+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
2906+ "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
2907+ "dev": true,
2908+ "license": "MIT",
2909+ "dependencies": {
2910+ "call-bind": "^1.0.8",
2911+ "call-bound": "^1.0.4",
2912+ "define-properties": "^1.2.1",
2913+ "es-abstract": "^1.23.9",
2914+ "es-errors": "^1.3.0",
2915+ "es-object-atoms": "^1.1.1",
2916+ "es-shim-unscopables": "^1.1.0"
2917+ },
2918+ "engines": {
2919+ "node": ">= 0.4"
2920+ },
2921+ "funding": {
2922+ "url": "https://github.com/sponsors/ljharb"
2923+ }
2924+ },
2925+ "node_modules/array.prototype.flat": {
2926+ "version": "1.3.3",
2927+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
2928+ "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
2929+ "dev": true,
2930+ "license": "MIT",
2931+ "dependencies": {
2932+ "call-bind": "^1.0.8",
2933+ "define-properties": "^1.2.1",
2934+ "es-abstract": "^1.23.5",
2935+ "es-shim-unscopables": "^1.0.2"
2936+ },
2937+ "engines": {
2938+ "node": ">= 0.4"
2939+ },
2940+ "funding": {
2941+ "url": "https://github.com/sponsors/ljharb"
2942+ }
2943+ },
2944+ "node_modules/array.prototype.flatmap": {
2945+ "version": "1.3.3",
2946+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
2947+ "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
2948+ "dev": true,
2949+ "license": "MIT",
2950+ "dependencies": {
2951+ "call-bind": "^1.0.8",
2952+ "define-properties": "^1.2.1",
2953+ "es-abstract": "^1.23.5",
2954+ "es-shim-unscopables": "^1.0.2"
2955+ },
2956+ "engines": {
2957+ "node": ">= 0.4"
2958+ },
2959+ "funding": {
2960+ "url": "https://github.com/sponsors/ljharb"
2961+ }
2962+ },
2963+ "node_modules/array.prototype.tosorted": {
2964+ "version": "1.1.4",
2965+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
2966+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
2967+ "dev": true,
2968+ "license": "MIT",
2969+ "dependencies": {
2970+ "call-bind": "^1.0.7",
2971+ "define-properties": "^1.2.1",
2972+ "es-abstract": "^1.23.3",
2973+ "es-errors": "^1.3.0",
2974+ "es-shim-unscopables": "^1.0.2"
2975+ },
2976+ "engines": {
2977+ "node": ">= 0.4"
2978+ }
2979+ },
2980+ "node_modules/arraybuffer.prototype.slice": {
2981+ "version": "1.0.4",
2982+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
2983+ "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
2984+ "dev": true,
2985+ "license": "MIT",
2986+ "dependencies": {
2987+ "array-buffer-byte-length": "^1.0.1",
2988+ "call-bind": "^1.0.8",
2989+ "define-properties": "^1.2.1",
2990+ "es-abstract": "^1.23.5",
2991+ "es-errors": "^1.3.0",
2992+ "get-intrinsic": "^1.2.6",
2993+ "is-array-buffer": "^3.0.4"
2994+ },
2995+ "engines": {
2996+ "node": ">= 0.4"
2997+ },
2998+ "funding": {
2999+ "url": "https://github.com/sponsors/ljharb"
3000+ }
3001+ },
3002+ "node_modules/ast-types-flow": {
3003+ "version": "0.0.8",
3004+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
3005+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
3006+ "dev": true,
3007+ "license": "MIT"
3008+ },
3009+ "node_modules/async-function": {
3010+ "version": "1.0.0",
3011+ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
3012+ "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
3013+ "dev": true,
3014+ "license": "MIT",
3015+ "engines": {
3016+ "node": ">= 0.4"
3017+ }
3018+ },
3019+ "node_modules/available-typed-arrays": {
3020+ "version": "1.0.7",
3021+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
3022+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
3023+ "dev": true,
3024+ "license": "MIT",
3025+ "dependencies": {
3026+ "possible-typed-array-names": "^1.0.0"
3027+ },
3028+ "engines": {
3029+ "node": ">= 0.4"
3030+ },
3031+ "funding": {
3032+ "url": "https://github.com/sponsors/ljharb"
3033+ }
3034+ },
3035+ "node_modules/axe-core": {
3036+ "version": "4.12.1",
3037+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.12.1.tgz",
3038+ "integrity": "sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==",
3039+ "dev": true,
3040+ "license": "MPL-2.0",
3041+ "engines": {
3042+ "node": ">=4"
3043+ }
3044+ },
3045+ "node_modules/axobject-query": {
3046+ "version": "4.1.0",
3047+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
3048+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
3049+ "dev": true,
3050+ "license": "Apache-2.0",
3051+ "engines": {
3052+ "node": ">= 0.4"
3053+ }
3054+ },
3055+ "node_modules/balanced-match": {
3056+ "version": "1.0.2",
3057+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
3058+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
3059+ "dev": true,
3060+ "license": "MIT"
3061+ },
3062+ "node_modules/baseline-browser-mapping": {
3063+ "version": "2.11.12",
3064+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.12.tgz",
3065+ "integrity": "sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==",
3066+ "license": "Apache-2.0",
3067+ "bin": {
3068+ "baseline-browser-mapping": "dist/cli.cjs"
3069+ },
3070+ "engines": {
3071+ "node": ">=6.0.0"
3072+ }
3073+ },
3074+ "node_modules/brace-expansion": {
3075+ "version": "1.1.18",
3076+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
3077+ "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
3078+ "dev": true,
3079+ "license": "MIT",
3080+ "dependencies": {
3081+ "balanced-match": "^1.0.0",
3082+ "concat-map": "0.0.1"
3083+ }
3084+ },
3085+ "node_modules/braces": {
3086+ "version": "3.0.3",
3087+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
3088+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
3089+ "dev": true,
3090+ "license": "MIT",
3091+ "dependencies": {
3092+ "fill-range": "^7.1.1"
3093+ },
3094+ "engines": {
3095+ "node": ">=8"
3096+ }
3097+ },
3098+ "node_modules/browserslist": {
3099+ "version": "4.28.7",
3100+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz",
3101+ "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==",
3102+ "dev": true,
3103+ "funding": [
3104+ {
3105+ "type": "opencollective",
3106+ "url": "https://opencollective.com/browserslist"
3107+ },
3108+ {
3109+ "type": "tidelift",
3110+ "url": "https://tidelift.com/funding/github/npm/browserslist"
3111+ },
3112+ {
3113+ "type": "github",
3114+ "url": "https://github.com/sponsors/ai"
3115+ }
3116+ ],
3117+ "license": "MIT",
3118+ "dependencies": {
3119+ "baseline-browser-mapping": "^2.10.44",
3120+ "caniuse-lite": "^1.0.30001806",
3121+ "electron-to-chromium": "^1.5.393",
3122+ "node-releases": "^2.0.51",
3123+ "update-browserslist-db": "^1.2.3"
3124+ },
3125+ "bin": {
3126+ "browserslist": "cli.js"
3127+ },
3128+ "engines": {
3129+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
3130+ }
3131+ },
3132+ "node_modules/call-bind": {
3133+ "version": "1.0.9",
3134+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz",
3135+ "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==",
3136+ "dev": true,
3137+ "license": "MIT",
3138+ "dependencies": {
3139+ "call-bind-apply-helpers": "^1.0.2",
3140+ "es-define-property": "^1.0.1",
3141+ "get-intrinsic": "^1.3.0",
3142+ "set-function-length": "^1.2.2"
3143+ },
3144+ "engines": {
3145+ "node": ">= 0.4"
3146+ },
3147+ "funding": {
3148+ "url": "https://github.com/sponsors/ljharb"
3149+ }
3150+ },
3151+ "node_modules/call-bind-apply-helpers": {
3152+ "version": "1.0.2",
3153+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
3154+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
3155+ "dev": true,
3156+ "license": "MIT",
3157+ "dependencies": {
3158+ "es-errors": "^1.3.0",
3159+ "function-bind": "^1.1.2"
3160+ },
3161+ "engines": {
3162+ "node": ">= 0.4"
3163+ }
3164+ },
3165+ "node_modules/call-bound": {
3166+ "version": "1.0.4",
3167+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
3168+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
3169+ "dev": true,
3170+ "license": "MIT",
3171+ "dependencies": {
3172+ "call-bind-apply-helpers": "^1.0.2",
3173+ "get-intrinsic": "^1.3.0"
3174+ },
3175+ "engines": {
3176+ "node": ">= 0.4"
3177+ },
3178+ "funding": {
3179+ "url": "https://github.com/sponsors/ljharb"
3180+ }
3181+ },
3182+ "node_modules/callsites": {
3183+ "version": "3.1.0",
3184+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
3185+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
3186+ "dev": true,
3187+ "license": "MIT",
3188+ "engines": {
3189+ "node": ">=6"
3190+ }
3191+ },
3192+ "node_modules/caniuse-lite": {
3193+ "version": "1.0.30001806",
3194+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz",
3195+ "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==",
3196+ "funding": [
3197+ {
3198+ "type": "opencollective",
3199+ "url": "https://opencollective.com/browserslist"
3200+ },
3201+ {
3202+ "type": "tidelift",
3203+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
3204+ },
3205+ {
3206+ "type": "github",
3207+ "url": "https://github.com/sponsors/ai"
3208+ }
3209+ ],
3210+ "license": "CC-BY-4.0"
3211+ },
3212+ "node_modules/chalk": {
3213+ "version": "4.1.2",
3214+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
3215+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
3216+ "dev": true,
3217+ "license": "MIT",
3218+ "dependencies": {
3219+ "ansi-styles": "^4.1.0",
3220+ "supports-color": "^7.1.0"
3221+ },
3222+ "engines": {
3223+ "node": ">=10"
3224+ },
3225+ "funding": {
3226+ "url": "https://github.com/chalk/chalk?sponsor=1"
3227+ }
3228+ },
3229+ "node_modules/client-only": {
3230+ "version": "0.0.1",
3231+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
3232+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
3233+ "license": "MIT"
3234+ },
3235+ "node_modules/color-convert": {
3236+ "version": "2.0.1",
3237+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
3238+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
3239+ "dev": true,
3240+ "license": "MIT",
3241+ "dependencies": {
3242+ "color-name": "~1.1.4"
3243+ },
3244+ "engines": {
3245+ "node": ">=7.0.0"
3246+ }
3247+ },
3248+ "node_modules/color-name": {
3249+ "version": "1.1.4",
3250+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
3251+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
3252+ "dev": true,
3253+ "license": "MIT"
3254+ },
3255+ "node_modules/concat-map": {
3256+ "version": "0.0.1",
3257+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
3258+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
3259+ "dev": true,
3260+ "license": "MIT"
3261+ },
3262+ "node_modules/convert-source-map": {
3263+ "version": "2.0.0",
3264+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
3265+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
3266+ "dev": true,
3267+ "license": "MIT"
3268+ },
3269+ "node_modules/cross-spawn": {
3270+ "version": "7.0.6",
3271+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
3272+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
3273+ "dev": true,
3274+ "license": "MIT",
3275+ "dependencies": {
3276+ "path-key": "^3.1.0",
3277+ "shebang-command": "^2.0.0",
3278+ "which": "^2.0.1"
3279+ },
3280+ "engines": {
3281+ "node": ">= 8"
3282+ }
3283+ },
3284+ "node_modules/csstype": {
3285+ "version": "3.2.3",
3286+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
3287+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
3288+ "dev": true,
3289+ "license": "MIT"
3290+ },
3291+ "node_modules/damerau-levenshtein": {
3292+ "version": "1.0.8",
3293+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
3294+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
3295+ "dev": true,
3296+ "license": "BSD-2-Clause"
3297+ },
3298+ "node_modules/data-view-buffer": {
3299+ "version": "1.0.2",
3300+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
3301+ "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
3302+ "dev": true,
3303+ "license": "MIT",
3304+ "dependencies": {
3305+ "call-bound": "^1.0.3",
3306+ "es-errors": "^1.3.0",
3307+ "is-data-view": "^1.0.2"
3308+ },
3309+ "engines": {
3310+ "node": ">= 0.4"
3311+ },
3312+ "funding": {
3313+ "url": "https://github.com/sponsors/ljharb"
3314+ }
3315+ },
3316+ "node_modules/data-view-byte-length": {
3317+ "version": "1.0.2",
3318+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
3319+ "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
3320+ "dev": true,
3321+ "license": "MIT",
3322+ "dependencies": {
3323+ "call-bound": "^1.0.3",
3324+ "es-errors": "^1.3.0",
3325+ "is-data-view": "^1.0.2"
3326+ },
3327+ "engines": {
3328+ "node": ">= 0.4"
3329+ },
3330+ "funding": {
3331+ "url": "https://github.com/sponsors/inspect-js"
3332+ }
3333+ },
3334+ "node_modules/data-view-byte-offset": {
3335+ "version": "1.0.1",
3336+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
3337+ "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
3338+ "dev": true,
3339+ "license": "MIT",
3340+ "dependencies": {
3341+ "call-bound": "^1.0.2",
3342+ "es-errors": "^1.3.0",
3343+ "is-data-view": "^1.0.1"
3344+ },
3345+ "engines": {
3346+ "node": ">= 0.4"
3347+ },
3348+ "funding": {
3349+ "url": "https://github.com/sponsors/ljharb"
3350+ }
3351+ },
3352+ "node_modules/debug": {
3353+ "version": "4.4.3",
3354+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
3355+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
3356+ "dev": true,
3357+ "license": "MIT",
3358+ "dependencies": {
3359+ "ms": "^2.1.3"
3360+ },
3361+ "engines": {
3362+ "node": ">=6.0"
3363+ },
3364+ "peerDependenciesMeta": {
3365+ "supports-color": {
3366+ "optional": true
3367+ }
3368+ }
3369+ },
3370+ "node_modules/deep-is": {
3371+ "version": "0.1.4",
3372+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
3373+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
3374+ "dev": true,
3375+ "license": "MIT"
3376+ },
3377+ "node_modules/define-data-property": {
3378+ "version": "1.1.4",
3379+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
3380+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
3381+ "dev": true,
3382+ "license": "MIT",
3383+ "dependencies": {
3384+ "es-define-property": "^1.0.0",
3385+ "es-errors": "^1.3.0",
3386+ "gopd": "^1.0.1"
3387+ },
3388+ "engines": {
3389+ "node": ">= 0.4"
3390+ },
3391+ "funding": {
3392+ "url": "https://github.com/sponsors/ljharb"
3393+ }
3394+ },
3395+ "node_modules/define-properties": {
3396+ "version": "1.2.1",
3397+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
3398+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
3399+ "dev": true,
3400+ "license": "MIT",
3401+ "dependencies": {
3402+ "define-data-property": "^1.0.1",
3403+ "has-property-descriptors": "^1.0.0",
3404+ "object-keys": "^1.1.1"
3405+ },
3406+ "engines": {
3407+ "node": ">= 0.4"
3408+ },
3409+ "funding": {
3410+ "url": "https://github.com/sponsors/ljharb"
3411+ }
3412+ },
3413+ "node_modules/detect-libc": {
3414+ "version": "2.1.2",
3415+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
3416+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
3417+ "devOptional": true,
3418+ "license": "Apache-2.0",
3419+ "engines": {
3420+ "node": ">=8"
3421+ }
3422+ },
3423+ "node_modules/doctrine": {
3424+ "version": "2.1.0",
3425+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
3426+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
3427+ "dev": true,
3428+ "license": "Apache-2.0",
3429+ "dependencies": {
3430+ "esutils": "^2.0.2"
3431+ },
3432+ "engines": {
3433+ "node": ">=0.10.0"
3434+ }
3435+ },
3436+ "node_modules/dunder-proto": {
3437+ "version": "1.0.1",
3438+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
3439+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
3440+ "dev": true,
3441+ "license": "MIT",
3442+ "dependencies": {
3443+ "call-bind-apply-helpers": "^1.0.1",
3444+ "es-errors": "^1.3.0",
3445+ "gopd": "^1.2.0"
3446+ },
3447+ "engines": {
3448+ "node": ">= 0.4"
3449+ }
3450+ },
3451+ "node_modules/electron-to-chromium": {
3452+ "version": "1.5.399",
3453+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.399.tgz",
3454+ "integrity": "sha512-lEcqhErbHjXRvd41rnWLpzbyU/IXfIYo7QwaFWmxGeLiLyY2TBCdHnWY88vB+p3ubnihRypDm66panXl7TylLA==",
3455+ "dev": true,
3456+ "license": "ISC"
3457+ },
3458+ "node_modules/emoji-regex": {
3459+ "version": "9.2.2",
3460+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
3461+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
3462+ "dev": true,
3463+ "license": "MIT"
3464+ },
3465+ "node_modules/enhanced-resolve": {
3466+ "version": "5.24.5",
3467+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz",
3468+ "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==",
3469+ "dev": true,
3470+ "license": "MIT",
3471+ "dependencies": {
3472+ "graceful-fs": "^4.2.4",
3473+ "tapable": "^2.3.3"
3474+ },
3475+ "engines": {
3476+ "node": ">=10.13.0"
3477+ }
3478+ },
3479+ "node_modules/es-abstract": {
3480+ "version": "1.24.2",
3481+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz",
3482+ "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==",
3483+ "dev": true,
3484+ "license": "MIT",
3485+ "dependencies": {
3486+ "array-buffer-byte-length": "^1.0.2",
3487+ "arraybuffer.prototype.slice": "^1.0.4",
3488+ "available-typed-arrays": "^1.0.7",
3489+ "call-bind": "^1.0.8",
3490+ "call-bound": "^1.0.4",
3491+ "data-view-buffer": "^1.0.2",
3492+ "data-view-byte-length": "^1.0.2",
3493+ "data-view-byte-offset": "^1.0.1",
3494+ "es-define-property": "^1.0.1",
3495+ "es-errors": "^1.3.0",
3496+ "es-object-atoms": "^1.1.1",
3497+ "es-set-tostringtag": "^2.1.0",
3498+ "es-to-primitive": "^1.3.0",
3499+ "function.prototype.name": "^1.1.8",
3500+ "get-intrinsic": "^1.3.0",
3501+ "get-proto": "^1.0.1",
3502+ "get-symbol-description": "^1.1.0",
3503+ "globalthis": "^1.0.4",
3504+ "gopd": "^1.2.0",
3505+ "has-property-descriptors": "^1.0.2",
3506+ "has-proto": "^1.2.0",
3507+ "has-symbols": "^1.1.0",
3508+ "hasown": "^2.0.2",
3509+ "internal-slot": "^1.1.0",
3510+ "is-array-buffer": "^3.0.5",
3511+ "is-callable": "^1.2.7",
3512+ "is-data-view": "^1.0.2",
3513+ "is-negative-zero": "^2.0.3",
3514+ "is-regex": "^1.2.1",
3515+ "is-set": "^2.0.3",
3516+ "is-shared-array-buffer": "^1.0.4",
3517+ "is-string": "^1.1.1",
3518+ "is-typed-array": "^1.1.15",
3519+ "is-weakref": "^1.1.1",
3520+ "math-intrinsics": "^1.1.0",
3521+ "object-inspect": "^1.13.4",
3522+ "object-keys": "^1.1.1",
3523+ "object.assign": "^4.1.7",
3524+ "own-keys": "^1.0.1",
3525+ "regexp.prototype.flags": "^1.5.4",
3526+ "safe-array-concat": "^1.1.3",
3527+ "safe-push-apply": "^1.0.0",
3528+ "safe-regex-test": "^1.1.0",
3529+ "set-proto": "^1.0.0",
3530+ "stop-iteration-iterator": "^1.1.0",
3531+ "string.prototype.trim": "^1.2.10",
3532+ "string.prototype.trimend": "^1.0.9",
3533+ "string.prototype.trimstart": "^1.0.8",
3534+ "typed-array-buffer": "^1.0.3",
3535+ "typed-array-byte-length": "^1.0.3",
3536+ "typed-array-byte-offset": "^1.0.4",
3537+ "typed-array-length": "^1.0.7",
3538+ "unbox-primitive": "^1.1.0",
3539+ "which-typed-array": "^1.1.19"
3540+ },
3541+ "engines": {
3542+ "node": ">= 0.4"
3543+ },
3544+ "funding": {
3545+ "url": "https://github.com/sponsors/ljharb"
3546+ }
3547+ },
3548+ "node_modules/es-abstract-get": {
3549+ "version": "1.0.0",
3550+ "resolved": "https://registry.npmjs.org/es-abstract-get/-/es-abstract-get-1.0.0.tgz",
3551+ "integrity": "sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==",
3552+ "dev": true,
3553+ "license": "MIT",
3554+ "dependencies": {
3555+ "es-errors": "^1.3.0",
3556+ "es-object-atoms": "^1.1.2",
3557+ "is-callable": "^1.2.7",
3558+ "object-inspect": "^1.13.4"
3559+ },
3560+ "engines": {
3561+ "node": ">= 0.4"
3562+ },
3563+ "funding": {
3564+ "url": "https://github.com/sponsors/ljharb"
3565+ }
3566+ },
3567+ "node_modules/es-define-property": {
3568+ "version": "1.0.1",
3569+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
3570+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
3571+ "dev": true,
3572+ "license": "MIT",
3573+ "engines": {
3574+ "node": ">= 0.4"
3575+ }
3576+ },
3577+ "node_modules/es-errors": {
3578+ "version": "1.3.0",
3579+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
3580+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
3581+ "dev": true,
3582+ "license": "MIT",
3583+ "engines": {
3584+ "node": ">= 0.4"
3585+ }
3586+ },
3587+ "node_modules/es-iterator-helpers": {
3588+ "version": "1.4.0",
3589+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.4.0.tgz",
3590+ "integrity": "sha512-c/A0P0oxkACDc+cKWw8evLXK83oBKgn0qPOqCYT4x9uolpCIJAcYvJC9QYKNDRPsTeGyCrQ326jrvgZWdCdK5Q==",
3591+ "dev": true,
3592+ "license": "MIT",
3593+ "dependencies": {
3594+ "call-bind": "^1.0.9",
3595+ "call-bound": "^1.0.4",
3596+ "define-properties": "^1.2.1",
3597+ "es-abstract": "^1.24.2",
3598+ "es-errors": "^1.3.0",
3599+ "es-set-tostringtag": "^2.1.0",
3600+ "function-bind": "^1.1.2",
3601+ "get-intrinsic": "^1.3.0",
3602+ "globalthis": "^1.0.4",
3603+ "gopd": "^1.2.0",
3604+ "has-property-descriptors": "^1.0.2",
3605+ "has-proto": "^1.2.0",
3606+ "has-symbols": "^1.1.0",
3607+ "internal-slot": "^1.1.0",
3608+ "iterator.prototype": "^1.1.5",
3609+ "math-intrinsics": "^1.1.0"
3610+ },
3611+ "engines": {
3612+ "node": ">= 0.4"
3613+ }
3614+ },
3615+ "node_modules/es-object-atoms": {
3616+ "version": "1.1.2",
3617+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
3618+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
3619+ "dev": true,
3620+ "license": "MIT",
3621+ "dependencies": {
3622+ "es-errors": "^1.3.0"
3623+ },
3624+ "engines": {
3625+ "node": ">= 0.4"
3626+ }
3627+ },
3628+ "node_modules/es-set-tostringtag": {
3629+ "version": "2.1.0",
3630+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
3631+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
3632+ "dev": true,
3633+ "license": "MIT",
3634+ "dependencies": {
3635+ "es-errors": "^1.3.0",
3636+ "get-intrinsic": "^1.2.6",
3637+ "has-tostringtag": "^1.0.2",
3638+ "hasown": "^2.0.2"
3639+ },
3640+ "engines": {
3641+ "node": ">= 0.4"
3642+ }
3643+ },
3644+ "node_modules/es-shim-unscopables": {
3645+ "version": "1.1.0",
3646+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
3647+ "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
3648+ "dev": true,
3649+ "license": "MIT",
3650+ "dependencies": {
3651+ "hasown": "^2.0.2"
3652+ },
3653+ "engines": {
3654+ "node": ">= 0.4"
3655+ }
3656+ },
3657+ "node_modules/es-to-primitive": {
3658+ "version": "1.3.4",
3659+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.4.tgz",
3660+ "integrity": "sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==",
3661+ "dev": true,
3662+ "license": "MIT",
3663+ "dependencies": {
3664+ "es-abstract-get": "^1.0.0",
3665+ "es-define-property": "^1.0.1",
3666+ "es-errors": "^1.3.0",
3667+ "is-callable": "^1.2.7",
3668+ "is-date-object": "^1.1.0",
3669+ "is-symbol": "^1.1.1"
3670+ },
3671+ "engines": {
3672+ "node": ">= 0.4"
3673+ },
3674+ "funding": {
3675+ "url": "https://github.com/sponsors/ljharb"
3676+ }
3677+ },
3678+ "node_modules/esbuild": {
3679+ "version": "0.28.1",
3680+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz",
3681+ "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==",
3682+ "dev": true,
3683+ "hasInstallScript": true,
3684+ "license": "MIT",
3685+ "bin": {
3686+ "esbuild": "bin/esbuild"
3687+ },
3688+ "engines": {
3689+ "node": ">=18"
3690+ },
3691+ "optionalDependencies": {
3692+ "@esbuild/aix-ppc64": "0.28.1",
3693+ "@esbuild/android-arm": "0.28.1",
3694+ "@esbuild/android-arm64": "0.28.1",
3695+ "@esbuild/android-x64": "0.28.1",
3696+ "@esbuild/darwin-arm64": "0.28.1",
3697+ "@esbuild/darwin-x64": "0.28.1",
3698+ "@esbuild/freebsd-arm64": "0.28.1",
3699+ "@esbuild/freebsd-x64": "0.28.1",
3700+ "@esbuild/linux-arm": "0.28.1",
3701+ "@esbuild/linux-arm64": "0.28.1",
3702+ "@esbuild/linux-ia32": "0.28.1",
3703+ "@esbuild/linux-loong64": "0.28.1",
3704+ "@esbuild/linux-mips64el": "0.28.1",
3705+ "@esbuild/linux-ppc64": "0.28.1",
3706+ "@esbuild/linux-riscv64": "0.28.1",
3707+ "@esbuild/linux-s390x": "0.28.1",
3708+ "@esbuild/linux-x64": "0.28.1",
3709+ "@esbuild/netbsd-arm64": "0.28.1",
3710+ "@esbuild/netbsd-x64": "0.28.1",
3711+ "@esbuild/openbsd-arm64": "0.28.1",
3712+ "@esbuild/openbsd-x64": "0.28.1",
3713+ "@esbuild/openharmony-arm64": "0.28.1",
3714+ "@esbuild/sunos-x64": "0.28.1",
3715+ "@esbuild/win32-arm64": "0.28.1",
3716+ "@esbuild/win32-ia32": "0.28.1",
3717+ "@esbuild/win32-x64": "0.28.1"
3718+ }
3719+ },
3720+ "node_modules/escalade": {
3721+ "version": "3.2.0",
3722+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
3723+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
3724+ "dev": true,
3725+ "license": "MIT",
3726+ "engines": {
3727+ "node": ">=6"
3728+ }
3729+ },
3730+ "node_modules/escape-string-regexp": {
3731+ "version": "4.0.0",
3732+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
3733+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
3734+ "dev": true,
3735+ "license": "MIT",
3736+ "engines": {
3737+ "node": ">=10"
3738+ },
3739+ "funding": {
3740+ "url": "https://github.com/sponsors/sindresorhus"
3741+ }
3742+ },
3743+ "node_modules/eslint": {
3744+ "version": "9.39.5",
3745+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
3746+ "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
3747+ "dev": true,
3748+ "license": "MIT",
3749+ "dependencies": {
3750+ "@eslint-community/eslint-utils": "^4.8.0",
3751+ "@eslint-community/regexpp": "^4.12.1",
3752+ "@eslint/config-array": "^0.21.2",
3753+ "@eslint/config-helpers": "^0.4.2",
3754+ "@eslint/core": "^0.17.0",
3755+ "@eslint/eslintrc": "^3.3.6",
3756+ "@eslint/js": "9.39.5",
3757+ "@eslint/plugin-kit": "^0.4.1",
3758+ "@humanfs/node": "^0.16.6",
3759+ "@humanwhocodes/module-importer": "^1.0.1",
3760+ "@humanwhocodes/retry": "^0.4.2",
3761+ "@types/estree": "^1.0.6",
3762+ "ajv": "^6.14.0",
3763+ "chalk": "^4.0.0",
3764+ "cross-spawn": "^7.0.6",
3765+ "debug": "^4.3.2",
3766+ "escape-string-regexp": "^4.0.0",
3767+ "eslint-scope": "^8.4.0",
3768+ "eslint-visitor-keys": "^4.2.1",
3769+ "espree": "^10.4.0",
3770+ "esquery": "^1.5.0",
3771+ "esutils": "^2.0.2",
3772+ "fast-deep-equal": "^3.1.3",
3773+ "file-entry-cache": "^8.0.0",
3774+ "find-up": "^5.0.0",
3775+ "glob-parent": "^6.0.2",
3776+ "ignore": "^5.2.0",
3777+ "imurmurhash": "^0.1.4",
3778+ "is-glob": "^4.0.0",
3779+ "json-stable-stringify-without-jsonify": "^1.0.1",
3780+ "lodash.merge": "^4.6.2",
3781+ "minimatch": "^3.1.5",
3782+ "natural-compare": "^1.4.0",
3783+ "optionator": "^0.9.3"
3784+ },
3785+ "bin": {
3786+ "eslint": "bin/eslint.js"
3787+ },
3788+ "engines": {
3789+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3790+ },
3791+ "funding": {
3792+ "url": "https://eslint.org/donate"
3793+ },
3794+ "peerDependencies": {
3795+ "jiti": "*"
3796+ },
3797+ "peerDependenciesMeta": {
3798+ "jiti": {
3799+ "optional": true
3800+ }
3801+ }
3802+ },
3803+ "node_modules/eslint-config-next": {
3804+ "version": "16.2.12",
3805+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.2.12.tgz",
3806+ "integrity": "sha512-iaaf4vvKo5h2LBdGt0JuRv7t0Ysqr9FMCiFxbptDg8LqOE//mIKR80DdpOnSVM7qjLH3jT8P0aFiwXxBEGZRXw==",
3807+ "dev": true,
3808+ "license": "MIT",
3809+ "dependencies": {
3810+ "@next/eslint-plugin-next": "16.2.12",
3811+ "eslint-import-resolver-node": "^0.3.6",
3812+ "eslint-import-resolver-typescript": "^3.5.2",
3813+ "eslint-plugin-import": "^2.32.0",
3814+ "eslint-plugin-jsx-a11y": "^6.10.0",
3815+ "eslint-plugin-react": "^7.37.0",
3816+ "eslint-plugin-react-hooks": "^7.0.0",
3817+ "globals": "16.4.0",
3818+ "typescript-eslint": "^8.46.0"
3819+ },
3820+ "peerDependencies": {
3821+ "eslint": ">=9.0.0",
3822+ "typescript": ">=3.3.1"
3823+ },
3824+ "peerDependenciesMeta": {
3825+ "typescript": {
3826+ "optional": true
3827+ }
3828+ }
3829+ },
3830+ "node_modules/eslint-config-next/node_modules/globals": {
3831+ "version": "16.4.0",
3832+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz",
3833+ "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==",
3834+ "dev": true,
3835+ "license": "MIT",
3836+ "engines": {
3837+ "node": ">=18"
3838+ },
3839+ "funding": {
3840+ "url": "https://github.com/sponsors/sindresorhus"
3841+ }
3842+ },
3843+ "node_modules/eslint-import-resolver-node": {
3844+ "version": "0.3.10",
3845+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz",
3846+ "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==",
3847+ "dev": true,
3848+ "license": "MIT",
3849+ "dependencies": {
3850+ "debug": "^3.2.7",
3851+ "is-core-module": "^2.16.1",
3852+ "resolve": "^2.0.0-next.6"
3853+ }
3854+ },
3855+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
3856+ "version": "3.2.7",
3857+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3858+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3859+ "dev": true,
3860+ "license": "MIT",
3861+ "dependencies": {
3862+ "ms": "^2.1.1"
3863+ }
3864+ },
3865+ "node_modules/eslint-import-resolver-typescript": {
3866+ "version": "3.10.1",
3867+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
3868+ "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
3869+ "dev": true,
3870+ "license": "ISC",
3871+ "dependencies": {
3872+ "@nolyfill/is-core-module": "1.0.39",
3873+ "debug": "^4.4.0",
3874+ "get-tsconfig": "^4.10.0",
3875+ "is-bun-module": "^2.0.0",
3876+ "stable-hash": "^0.0.5",
3877+ "tinyglobby": "^0.2.13",
3878+ "unrs-resolver": "^1.6.2"
3879+ },
3880+ "engines": {
3881+ "node": "^14.18.0 || >=16.0.0"
3882+ },
3883+ "funding": {
3884+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
3885+ },
3886+ "peerDependencies": {
3887+ "eslint": "*",
3888+ "eslint-plugin-import": "*",
3889+ "eslint-plugin-import-x": "*"
3890+ },
3891+ "peerDependenciesMeta": {
3892+ "eslint-plugin-import": {
3893+ "optional": true
3894+ },
3895+ "eslint-plugin-import-x": {
3896+ "optional": true
3897+ }
3898+ }
3899+ },
3900+ "node_modules/eslint-module-utils": {
3901+ "version": "2.14.0",
3902+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.14.0.tgz",
3903+ "integrity": "sha512-W2WCRZ9Dqntd+2u8jJcVMV2PKulc6RdLgUUoh/yQr3uB6lo/ZOeGx11sv60/8S4QFFKNslAlWhr9u0Ef7ZW6Ig==",
3904+ "dev": true,
3905+ "license": "MIT",
3906+ "dependencies": {
3907+ "debug": "^3.2.7"
3908+ },
3909+ "engines": {
3910+ "node": ">=4"
3911+ },
3912+ "peerDependenciesMeta": {
3913+ "eslint": {
3914+ "optional": true
3915+ }
3916+ }
3917+ },
3918+ "node_modules/eslint-module-utils/node_modules/debug": {
3919+ "version": "3.2.7",
3920+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3921+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3922+ "dev": true,
3923+ "license": "MIT",
3924+ "dependencies": {
3925+ "ms": "^2.1.1"
3926+ }
3927+ },
3928+ "node_modules/eslint-plugin-import": {
3929+ "version": "2.32.0",
3930+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
3931+ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
3932+ "dev": true,
3933+ "license": "MIT",
3934+ "dependencies": {
3935+ "@rtsao/scc": "^1.1.0",
3936+ "array-includes": "^3.1.9",
3937+ "array.prototype.findlastindex": "^1.2.6",
3938+ "array.prototype.flat": "^1.3.3",
3939+ "array.prototype.flatmap": "^1.3.3",
3940+ "debug": "^3.2.7",
3941+ "doctrine": "^2.1.0",
3942+ "eslint-import-resolver-node": "^0.3.9",
3943+ "eslint-module-utils": "^2.12.1",
3944+ "hasown": "^2.0.2",
3945+ "is-core-module": "^2.16.1",
3946+ "is-glob": "^4.0.3",
3947+ "minimatch": "^3.1.2",
3948+ "object.fromentries": "^2.0.8",
3949+ "object.groupby": "^1.0.3",
3950+ "object.values": "^1.2.1",
3951+ "semver": "^6.3.1",
3952+ "string.prototype.trimend": "^1.0.9",
3953+ "tsconfig-paths": "^3.15.0"
3954+ },
3955+ "engines": {
3956+ "node": ">=4"
3957+ },
3958+ "peerDependencies": {
3959+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
3960+ }
3961+ },
3962+ "node_modules/eslint-plugin-import/node_modules/debug": {
3963+ "version": "3.2.7",
3964+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
3965+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
3966+ "dev": true,
3967+ "license": "MIT",
3968+ "dependencies": {
3969+ "ms": "^2.1.1"
3970+ }
3971+ },
3972+ "node_modules/eslint-plugin-jsx-a11y": {
3973+ "version": "6.10.2",
3974+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
3975+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
3976+ "dev": true,
3977+ "license": "MIT",
3978+ "dependencies": {
3979+ "aria-query": "^5.3.2",
3980+ "array-includes": "^3.1.8",
3981+ "array.prototype.flatmap": "^1.3.2",
3982+ "ast-types-flow": "^0.0.8",
3983+ "axe-core": "^4.10.0",
3984+ "axobject-query": "^4.1.0",
3985+ "damerau-levenshtein": "^1.0.8",
3986+ "emoji-regex": "^9.2.2",
3987+ "hasown": "^2.0.2",
3988+ "jsx-ast-utils": "^3.3.5",
3989+ "language-tags": "^1.0.9",
3990+ "minimatch": "^3.1.2",
3991+ "object.fromentries": "^2.0.8",
3992+ "safe-regex-test": "^1.0.3",
3993+ "string.prototype.includes": "^2.0.1"
3994+ },
3995+ "engines": {
3996+ "node": ">=4.0"
3997+ },
3998+ "peerDependencies": {
3999+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
4000+ }
4001+ },
4002+ "node_modules/eslint-plugin-react": {
4003+ "version": "7.37.5",
4004+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
4005+ "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
4006+ "dev": true,
4007+ "license": "MIT",
4008+ "dependencies": {
4009+ "array-includes": "^3.1.8",
4010+ "array.prototype.findlast": "^1.2.5",
4011+ "array.prototype.flatmap": "^1.3.3",
4012+ "array.prototype.tosorted": "^1.1.4",
4013+ "doctrine": "^2.1.0",
4014+ "es-iterator-helpers": "^1.2.1",
4015+ "estraverse": "^5.3.0",
4016+ "hasown": "^2.0.2",
4017+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
4018+ "minimatch": "^3.1.2",
4019+ "object.entries": "^1.1.9",
4020+ "object.fromentries": "^2.0.8",
4021+ "object.values": "^1.2.1",
4022+ "prop-types": "^15.8.1",
4023+ "resolve": "^2.0.0-next.5",
4024+ "semver": "^6.3.1",
4025+ "string.prototype.matchall": "^4.0.12",
4026+ "string.prototype.repeat": "^1.0.0"
4027+ },
4028+ "engines": {
4029+ "node": ">=4"
4030+ },
4031+ "peerDependencies": {
4032+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
4033+ }
4034+ },
4035+ "node_modules/eslint-plugin-react-hooks": {
4036+ "version": "7.1.1",
4037+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz",
4038+ "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==",
4039+ "dev": true,
4040+ "license": "MIT",
4041+ "dependencies": {
4042+ "@babel/core": "^7.24.4",
4043+ "@babel/parser": "^7.24.4",
4044+ "hermes-parser": "^0.25.1",
4045+ "zod": "^3.25.0 || ^4.0.0",
4046+ "zod-validation-error": "^3.5.0 || ^4.0.0"
4047+ },
4048+ "engines": {
4049+ "node": ">=18"
4050+ },
4051+ "peerDependencies": {
4052+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0"
4053+ }
4054+ },
4055+ "node_modules/eslint-scope": {
4056+ "version": "8.4.0",
4057+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
4058+ "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
4059+ "dev": true,
4060+ "license": "BSD-2-Clause",
4061+ "dependencies": {
4062+ "esrecurse": "^4.3.0",
4063+ "estraverse": "^5.2.0"
4064+ },
4065+ "engines": {
4066+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4067+ },
4068+ "funding": {
4069+ "url": "https://opencollective.com/eslint"
4070+ }
4071+ },
4072+ "node_modules/eslint-visitor-keys": {
4073+ "version": "4.2.1",
4074+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
4075+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
4076+ "dev": true,
4077+ "license": "Apache-2.0",
4078+ "engines": {
4079+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4080+ },
4081+ "funding": {
4082+ "url": "https://opencollective.com/eslint"
4083+ }
4084+ },
4085+ "node_modules/espree": {
4086+ "version": "10.4.0",
4087+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
4088+ "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
4089+ "dev": true,
4090+ "license": "BSD-2-Clause",
4091+ "dependencies": {
4092+ "acorn": "^8.15.0",
4093+ "acorn-jsx": "^5.3.2",
4094+ "eslint-visitor-keys": "^4.2.1"
4095+ },
4096+ "engines": {
4097+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4098+ },
4099+ "funding": {
4100+ "url": "https://opencollective.com/eslint"
4101+ }
4102+ },
4103+ "node_modules/esquery": {
4104+ "version": "1.7.0",
4105+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
4106+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
4107+ "dev": true,
4108+ "license": "BSD-3-Clause",
4109+ "dependencies": {
4110+ "estraverse": "^5.1.0"
4111+ },
4112+ "engines": {
4113+ "node": ">=0.10"
4114+ }
4115+ },
4116+ "node_modules/esrecurse": {
4117+ "version": "4.3.0",
4118+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
4119+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
4120+ "dev": true,
4121+ "license": "BSD-2-Clause",
4122+ "dependencies": {
4123+ "estraverse": "^5.2.0"
4124+ },
4125+ "engines": {
4126+ "node": ">=4.0"
4127+ }
4128+ },
4129+ "node_modules/estraverse": {
4130+ "version": "5.3.0",
4131+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
4132+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
4133+ "dev": true,
4134+ "license": "BSD-2-Clause",
4135+ "engines": {
4136+ "node": ">=4.0"
4137+ }
4138+ },
4139+ "node_modules/esutils": {
4140+ "version": "2.0.3",
4141+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
4142+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
4143+ "dev": true,
4144+ "license": "BSD-2-Clause",
4145+ "engines": {
4146+ "node": ">=0.10.0"
4147+ }
4148+ },
4149+ "node_modules/fast-deep-equal": {
4150+ "version": "3.1.3",
4151+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
4152+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
4153+ "dev": true,
4154+ "license": "MIT"
4155+ },
4156+ "node_modules/fast-glob": {
4157+ "version": "3.3.1",
4158+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
4159+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
4160+ "dev": true,
4161+ "license": "MIT",
4162+ "dependencies": {
4163+ "@nodelib/fs.stat": "^2.0.2",
4164+ "@nodelib/fs.walk": "^1.2.3",
4165+ "glob-parent": "^5.1.2",
4166+ "merge2": "^1.3.0",
4167+ "micromatch": "^4.0.4"
4168+ },
4169+ "engines": {
4170+ "node": ">=8.6.0"
4171+ }
4172+ },
4173+ "node_modules/fast-glob/node_modules/glob-parent": {
4174+ "version": "5.1.2",
4175+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
4176+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
4177+ "dev": true,
4178+ "license": "ISC",
4179+ "dependencies": {
4180+ "is-glob": "^4.0.1"
4181+ },
4182+ "engines": {
4183+ "node": ">= 6"
4184+ }
4185+ },
4186+ "node_modules/fast-json-stable-stringify": {
4187+ "version": "2.1.0",
4188+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
4189+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
4190+ "dev": true,
4191+ "license": "MIT"
4192+ },
4193+ "node_modules/fast-levenshtein": {
4194+ "version": "2.0.6",
4195+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
4196+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
4197+ "dev": true,
4198+ "license": "MIT"
4199+ },
4200+ "node_modules/fastq": {
4201+ "version": "1.20.1",
4202+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
4203+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
4204+ "dev": true,
4205+ "license": "ISC",
4206+ "dependencies": {
4207+ "reusify": "^1.0.4"
4208+ }
4209+ },
4210+ "node_modules/file-entry-cache": {
4211+ "version": "8.0.0",
4212+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
4213+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
4214+ "dev": true,
4215+ "license": "MIT",
4216+ "dependencies": {
4217+ "flat-cache": "^4.0.0"
4218+ },
4219+ "engines": {
4220+ "node": ">=16.0.0"
4221+ }
4222+ },
4223+ "node_modules/fill-range": {
4224+ "version": "7.1.1",
4225+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
4226+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
4227+ "dev": true,
4228+ "license": "MIT",
4229+ "dependencies": {
4230+ "to-regex-range": "^5.0.1"
4231+ },
4232+ "engines": {
4233+ "node": ">=8"
4234+ }
4235+ },
4236+ "node_modules/find-up": {
4237+ "version": "5.0.0",
4238+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
4239+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
4240+ "dev": true,
4241+ "license": "MIT",
4242+ "dependencies": {
4243+ "locate-path": "^6.0.0",
4244+ "path-exists": "^4.0.0"
4245+ },
4246+ "engines": {
4247+ "node": ">=10"
4248+ },
4249+ "funding": {
4250+ "url": "https://github.com/sponsors/sindresorhus"
4251+ }
4252+ },
4253+ "node_modules/flat-cache": {
4254+ "version": "4.0.1",
4255+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
4256+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
4257+ "dev": true,
4258+ "license": "MIT",
4259+ "dependencies": {
4260+ "flatted": "^3.2.9",
4261+ "keyv": "^4.5.4"
4262+ },
4263+ "engines": {
4264+ "node": ">=16"
4265+ }
4266+ },
4267+ "node_modules/flatted": {
4268+ "version": "3.4.4",
4269+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
4270+ "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
4271+ "dev": true,
4272+ "license": "ISC"
4273+ },
4274+ "node_modules/for-each": {
4275+ "version": "0.3.5",
4276+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
4277+ "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
4278+ "dev": true,
4279+ "license": "MIT",
4280+ "dependencies": {
4281+ "is-callable": "^1.2.7"
4282+ },
4283+ "engines": {
4284+ "node": ">= 0.4"
4285+ },
4286+ "funding": {
4287+ "url": "https://github.com/sponsors/ljharb"
4288+ }
4289+ },
4290+ "node_modules/fsevents": {
4291+ "version": "2.3.3",
4292+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
4293+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
4294+ "dev": true,
4295+ "hasInstallScript": true,
4296+ "license": "MIT",
4297+ "optional": true,
4298+ "os": [
4299+ "darwin"
4300+ ],
4301+ "engines": {
4302+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
4303+ }
4304+ },
4305+ "node_modules/function-bind": {
4306+ "version": "1.1.2",
4307+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
4308+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
4309+ "dev": true,
4310+ "license": "MIT",
4311+ "funding": {
4312+ "url": "https://github.com/sponsors/ljharb"
4313+ }
4314+ },
4315+ "node_modules/function.prototype.name": {
4316+ "version": "1.2.0",
4317+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.2.0.tgz",
4318+ "integrity": "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==",
4319+ "dev": true,
4320+ "license": "MIT",
4321+ "dependencies": {
4322+ "call-bind": "^1.0.9",
4323+ "call-bound": "^1.0.4",
4324+ "es-define-property": "^1.0.1",
4325+ "es-errors": "^1.3.0",
4326+ "functions-have-names": "^1.2.3",
4327+ "has-property-descriptors": "^1.0.2",
4328+ "hasown": "^2.0.4",
4329+ "is-callable": "^1.2.7",
4330+ "is-document.all": "^1.0.0"
4331+ },
4332+ "engines": {
4333+ "node": ">= 0.4"
4334+ },
4335+ "funding": {
4336+ "url": "https://github.com/sponsors/ljharb"
4337+ }
4338+ },
4339+ "node_modules/functions-have-names": {
4340+ "version": "1.2.3",
4341+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
4342+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
4343+ "dev": true,
4344+ "license": "MIT",
4345+ "funding": {
4346+ "url": "https://github.com/sponsors/ljharb"
4347+ }
4348+ },
4349+ "node_modules/generator-function": {
4350+ "version": "2.0.1",
4351+ "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
4352+ "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
4353+ "dev": true,
4354+ "license": "MIT",
4355+ "engines": {
4356+ "node": ">= 0.4"
4357+ }
4358+ },
4359+ "node_modules/gensync": {
4360+ "version": "1.0.0-beta.2",
4361+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
4362+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
4363+ "dev": true,
4364+ "license": "MIT",
4365+ "engines": {
4366+ "node": ">=6.9.0"
4367+ }
4368+ },
4369+ "node_modules/get-intrinsic": {
4370+ "version": "1.3.0",
4371+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
4372+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
4373+ "dev": true,
4374+ "license": "MIT",
4375+ "dependencies": {
4376+ "call-bind-apply-helpers": "^1.0.2",
4377+ "es-define-property": "^1.0.1",
4378+ "es-errors": "^1.3.0",
4379+ "es-object-atoms": "^1.1.1",
4380+ "function-bind": "^1.1.2",
4381+ "get-proto": "^1.0.1",
4382+ "gopd": "^1.2.0",
4383+ "has-symbols": "^1.1.0",
4384+ "hasown": "^2.0.2",
4385+ "math-intrinsics": "^1.1.0"
4386+ },
4387+ "engines": {
4388+ "node": ">= 0.4"
4389+ },
4390+ "funding": {
4391+ "url": "https://github.com/sponsors/ljharb"
4392+ }
4393+ },
4394+ "node_modules/get-proto": {
4395+ "version": "1.0.1",
4396+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
4397+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
4398+ "dev": true,
4399+ "license": "MIT",
4400+ "dependencies": {
4401+ "dunder-proto": "^1.0.1",
4402+ "es-object-atoms": "^1.0.0"
4403+ },
4404+ "engines": {
4405+ "node": ">= 0.4"
4406+ }
4407+ },
4408+ "node_modules/get-symbol-description": {
4409+ "version": "1.1.0",
4410+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
4411+ "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
4412+ "dev": true,
4413+ "license": "MIT",
4414+ "dependencies": {
4415+ "call-bound": "^1.0.3",
4416+ "es-errors": "^1.3.0",
4417+ "get-intrinsic": "^1.2.6"
4418+ },
4419+ "engines": {
4420+ "node": ">= 0.4"
4421+ },
4422+ "funding": {
4423+ "url": "https://github.com/sponsors/ljharb"
4424+ }
4425+ },
4426+ "node_modules/get-tsconfig": {
4427+ "version": "4.14.1",
4428+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.1.tgz",
4429+ "integrity": "sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==",
4430+ "dev": true,
4431+ "license": "MIT",
4432+ "dependencies": {
4433+ "resolve-pkg-maps": "^1.0.0"
4434+ },
4435+ "funding": {
4436+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
4437+ }
4438+ },
4439+ "node_modules/glob-parent": {
4440+ "version": "6.0.2",
4441+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
4442+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
4443+ "dev": true,
4444+ "license": "ISC",
4445+ "dependencies": {
4446+ "is-glob": "^4.0.3"
4447+ },
4448+ "engines": {
4449+ "node": ">=10.13.0"
4450+ }
4451+ },
4452+ "node_modules/globals": {
4453+ "version": "14.0.0",
4454+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
4455+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
4456+ "dev": true,
4457+ "license": "MIT",
4458+ "engines": {
4459+ "node": ">=18"
4460+ },
4461+ "funding": {
4462+ "url": "https://github.com/sponsors/sindresorhus"
4463+ }
4464+ },
4465+ "node_modules/globalthis": {
4466+ "version": "1.0.4",
4467+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
4468+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
4469+ "dev": true,
4470+ "license": "MIT",
4471+ "dependencies": {
4472+ "define-properties": "^1.2.1",
4473+ "gopd": "^1.0.1"
4474+ },
4475+ "engines": {
4476+ "node": ">= 0.4"
4477+ },
4478+ "funding": {
4479+ "url": "https://github.com/sponsors/ljharb"
4480+ }
4481+ },
4482+ "node_modules/gopd": {
4483+ "version": "1.2.0",
4484+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
4485+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
4486+ "dev": true,
4487+ "license": "MIT",
4488+ "engines": {
4489+ "node": ">= 0.4"
4490+ },
4491+ "funding": {
4492+ "url": "https://github.com/sponsors/ljharb"
4493+ }
4494+ },
4495+ "node_modules/graceful-fs": {
4496+ "version": "4.2.11",
4497+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
4498+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
4499+ "dev": true,
4500+ "license": "ISC"
4501+ },
4502+ "node_modules/has-bigints": {
4503+ "version": "1.1.0",
4504+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
4505+ "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
4506+ "dev": true,
4507+ "license": "MIT",
4508+ "engines": {
4509+ "node": ">= 0.4"
4510+ },
4511+ "funding": {
4512+ "url": "https://github.com/sponsors/ljharb"
4513+ }
4514+ },
4515+ "node_modules/has-flag": {
4516+ "version": "4.0.0",
4517+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
4518+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
4519+ "dev": true,
4520+ "license": "MIT",
4521+ "engines": {
4522+ "node": ">=8"
4523+ }
4524+ },
4525+ "node_modules/has-property-descriptors": {
4526+ "version": "1.0.2",
4527+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
4528+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
4529+ "dev": true,
4530+ "license": "MIT",
4531+ "dependencies": {
4532+ "es-define-property": "^1.0.0"
4533+ },
4534+ "funding": {
4535+ "url": "https://github.com/sponsors/ljharb"
4536+ }
4537+ },
4538+ "node_modules/has-proto": {
4539+ "version": "1.2.0",
4540+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
4541+ "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
4542+ "dev": true,
4543+ "license": "MIT",
4544+ "dependencies": {
4545+ "dunder-proto": "^1.0.0"
4546+ },
4547+ "engines": {
4548+ "node": ">= 0.4"
4549+ },
4550+ "funding": {
4551+ "url": "https://github.com/sponsors/ljharb"
4552+ }
4553+ },
4554+ "node_modules/has-symbols": {
4555+ "version": "1.1.0",
4556+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
4557+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
4558+ "dev": true,
4559+ "license": "MIT",
4560+ "engines": {
4561+ "node": ">= 0.4"
4562+ },
4563+ "funding": {
4564+ "url": "https://github.com/sponsors/ljharb"
4565+ }
4566+ },
4567+ "node_modules/has-tostringtag": {
4568+ "version": "1.0.2",
4569+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
4570+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
4571+ "dev": true,
4572+ "license": "MIT",
4573+ "dependencies": {
4574+ "has-symbols": "^1.0.3"
4575+ },
4576+ "engines": {
4577+ "node": ">= 0.4"
4578+ },
4579+ "funding": {
4580+ "url": "https://github.com/sponsors/ljharb"
4581+ }
4582+ },
4583+ "node_modules/hasown": {
4584+ "version": "2.0.4",
4585+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
4586+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
4587+ "dev": true,
4588+ "license": "MIT",
4589+ "dependencies": {
4590+ "function-bind": "^1.1.2"
4591+ },
4592+ "engines": {
4593+ "node": ">= 0.4"
4594+ }
4595+ },
4596+ "node_modules/hermes-estree": {
4597+ "version": "0.25.1",
4598+ "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
4599+ "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==",
4600+ "dev": true,
4601+ "license": "MIT"
4602+ },
4603+ "node_modules/hermes-parser": {
4604+ "version": "0.25.1",
4605+ "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz",
4606+ "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==",
4607+ "dev": true,
4608+ "license": "MIT",
4609+ "dependencies": {
4610+ "hermes-estree": "0.25.1"
4611+ }
4612+ },
4613+ "node_modules/ignore": {
4614+ "version": "5.3.2",
4615+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
4616+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
4617+ "dev": true,
4618+ "license": "MIT",
4619+ "engines": {
4620+ "node": ">= 4"
4621+ }
4622+ },
4623+ "node_modules/import-fresh": {
4624+ "version": "3.3.1",
4625+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
4626+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
4627+ "dev": true,
4628+ "license": "MIT",
4629+ "dependencies": {
4630+ "parent-module": "^1.0.0",
4631+ "resolve-from": "^4.0.0"
4632+ },
4633+ "engines": {
4634+ "node": ">=6"
4635+ },
4636+ "funding": {
4637+ "url": "https://github.com/sponsors/sindresorhus"
4638+ }
4639+ },
4640+ "node_modules/imurmurhash": {
4641+ "version": "0.1.4",
4642+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
4643+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
4644+ "dev": true,
4645+ "license": "MIT",
4646+ "engines": {
4647+ "node": ">=0.8.19"
4648+ }
4649+ },
4650+ "node_modules/internal-slot": {
4651+ "version": "1.1.0",
4652+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
4653+ "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
4654+ "dev": true,
4655+ "license": "MIT",
4656+ "dependencies": {
4657+ "es-errors": "^1.3.0",
4658+ "hasown": "^2.0.2",
4659+ "side-channel": "^1.1.0"
4660+ },
4661+ "engines": {
4662+ "node": ">= 0.4"
4663+ }
4664+ },
4665+ "node_modules/is-array-buffer": {
4666+ "version": "3.0.5",
4667+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
4668+ "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
4669+ "dev": true,
4670+ "license": "MIT",
4671+ "dependencies": {
4672+ "call-bind": "^1.0.8",
4673+ "call-bound": "^1.0.3",
4674+ "get-intrinsic": "^1.2.6"
4675+ },
4676+ "engines": {
4677+ "node": ">= 0.4"
4678+ },
4679+ "funding": {
4680+ "url": "https://github.com/sponsors/ljharb"
4681+ }
4682+ },
4683+ "node_modules/is-async-function": {
4684+ "version": "2.1.1",
4685+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
4686+ "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
4687+ "dev": true,
4688+ "license": "MIT",
4689+ "dependencies": {
4690+ "async-function": "^1.0.0",
4691+ "call-bound": "^1.0.3",
4692+ "get-proto": "^1.0.1",
4693+ "has-tostringtag": "^1.0.2",
4694+ "safe-regex-test": "^1.1.0"
4695+ },
4696+ "engines": {
4697+ "node": ">= 0.4"
4698+ },
4699+ "funding": {
4700+ "url": "https://github.com/sponsors/ljharb"
4701+ }
4702+ },
4703+ "node_modules/is-bigint": {
4704+ "version": "1.1.0",
4705+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
4706+ "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
4707+ "dev": true,
4708+ "license": "MIT",
4709+ "dependencies": {
4710+ "has-bigints": "^1.0.2"
4711+ },
4712+ "engines": {
4713+ "node": ">= 0.4"
4714+ },
4715+ "funding": {
4716+ "url": "https://github.com/sponsors/ljharb"
4717+ }
4718+ },
4719+ "node_modules/is-boolean-object": {
4720+ "version": "1.2.2",
4721+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
4722+ "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
4723+ "dev": true,
4724+ "license": "MIT",
4725+ "dependencies": {
4726+ "call-bound": "^1.0.3",
4727+ "has-tostringtag": "^1.0.2"
4728+ },
4729+ "engines": {
4730+ "node": ">= 0.4"
4731+ },
4732+ "funding": {
4733+ "url": "https://github.com/sponsors/ljharb"
4734+ }
4735+ },
4736+ "node_modules/is-bun-module": {
4737+ "version": "2.0.0",
4738+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
4739+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
4740+ "dev": true,
4741+ "license": "MIT",
4742+ "dependencies": {
4743+ "semver": "^7.7.1"
4744+ }
4745+ },
4746+ "node_modules/is-bun-module/node_modules/semver": {
4747+ "version": "7.8.5",
4748+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
4749+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
4750+ "dev": true,
4751+ "license": "ISC",
4752+ "bin": {
4753+ "semver": "bin/semver.js"
4754+ },
4755+ "engines": {
4756+ "node": ">=10"
4757+ }
4758+ },
4759+ "node_modules/is-callable": {
4760+ "version": "1.2.7",
4761+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
4762+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
4763+ "dev": true,
4764+ "license": "MIT",
4765+ "engines": {
4766+ "node": ">= 0.4"
4767+ },
4768+ "funding": {
4769+ "url": "https://github.com/sponsors/ljharb"
4770+ }
4771+ },
4772+ "node_modules/is-core-module": {
4773+ "version": "2.16.2",
4774+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz",
4775+ "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
4776+ "dev": true,
4777+ "license": "MIT",
4778+ "dependencies": {
4779+ "hasown": "^2.0.3"
4780+ },
4781+ "engines": {
4782+ "node": ">= 0.4"
4783+ },
4784+ "funding": {
4785+ "url": "https://github.com/sponsors/ljharb"
4786+ }
4787+ },
4788+ "node_modules/is-data-view": {
4789+ "version": "1.0.2",
4790+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
4791+ "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
4792+ "dev": true,
4793+ "license": "MIT",
4794+ "dependencies": {
4795+ "call-bound": "^1.0.2",
4796+ "get-intrinsic": "^1.2.6",
4797+ "is-typed-array": "^1.1.13"
4798+ },
4799+ "engines": {
4800+ "node": ">= 0.4"
4801+ },
4802+ "funding": {
4803+ "url": "https://github.com/sponsors/ljharb"
4804+ }
4805+ },
4806+ "node_modules/is-date-object": {
4807+ "version": "1.1.0",
4808+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
4809+ "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
4810+ "dev": true,
4811+ "license": "MIT",
4812+ "dependencies": {
4813+ "call-bound": "^1.0.2",
4814+ "has-tostringtag": "^1.0.2"
4815+ },
4816+ "engines": {
4817+ "node": ">= 0.4"
4818+ },
4819+ "funding": {
4820+ "url": "https://github.com/sponsors/ljharb"
4821+ }
4822+ },
4823+ "node_modules/is-document.all": {
4824+ "version": "1.0.0",
4825+ "resolved": "https://registry.npmjs.org/is-document.all/-/is-document.all-1.0.0.tgz",
4826+ "integrity": "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==",
4827+ "dev": true,
4828+ "license": "MIT",
4829+ "dependencies": {
4830+ "call-bound": "^1.0.4"
4831+ },
4832+ "engines": {
4833+ "node": ">= 0.4"
4834+ },
4835+ "funding": {
4836+ "url": "https://github.com/sponsors/ljharb"
4837+ }
4838+ },
4839+ "node_modules/is-extglob": {
4840+ "version": "2.1.1",
4841+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
4842+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
4843+ "dev": true,
4844+ "license": "MIT",
4845+ "engines": {
4846+ "node": ">=0.10.0"
4847+ }
4848+ },
4849+ "node_modules/is-finalizationregistry": {
4850+ "version": "1.1.1",
4851+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
4852+ "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
4853+ "dev": true,
4854+ "license": "MIT",
4855+ "dependencies": {
4856+ "call-bound": "^1.0.3"
4857+ },
4858+ "engines": {
4859+ "node": ">= 0.4"
4860+ },
4861+ "funding": {
4862+ "url": "https://github.com/sponsors/ljharb"
4863+ }
4864+ },
4865+ "node_modules/is-generator-function": {
4866+ "version": "1.1.2",
4867+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
4868+ "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
4869+ "dev": true,
4870+ "license": "MIT",
4871+ "dependencies": {
4872+ "call-bound": "^1.0.4",
4873+ "generator-function": "^2.0.0",
4874+ "get-proto": "^1.0.1",
4875+ "has-tostringtag": "^1.0.2",
4876+ "safe-regex-test": "^1.1.0"
4877+ },
4878+ "engines": {
4879+ "node": ">= 0.4"
4880+ },
4881+ "funding": {
4882+ "url": "https://github.com/sponsors/ljharb"
4883+ }
4884+ },
4885+ "node_modules/is-glob": {
4886+ "version": "4.0.3",
4887+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
4888+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
4889+ "dev": true,
4890+ "license": "MIT",
4891+ "dependencies": {
4892+ "is-extglob": "^2.1.1"
4893+ },
4894+ "engines": {
4895+ "node": ">=0.10.0"
4896+ }
4897+ },
4898+ "node_modules/is-map": {
4899+ "version": "2.0.3",
4900+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
4901+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
4902+ "dev": true,
4903+ "license": "MIT",
4904+ "engines": {
4905+ "node": ">= 0.4"
4906+ },
4907+ "funding": {
4908+ "url": "https://github.com/sponsors/ljharb"
4909+ }
4910+ },
4911+ "node_modules/is-negative-zero": {
4912+ "version": "2.0.3",
4913+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
4914+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
4915+ "dev": true,
4916+ "license": "MIT",
4917+ "engines": {
4918+ "node": ">= 0.4"
4919+ },
4920+ "funding": {
4921+ "url": "https://github.com/sponsors/ljharb"
4922+ }
4923+ },
4924+ "node_modules/is-number": {
4925+ "version": "7.0.0",
4926+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
4927+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
4928+ "dev": true,
4929+ "license": "MIT",
4930+ "engines": {
4931+ "node": ">=0.12.0"
4932+ }
4933+ },
4934+ "node_modules/is-number-object": {
4935+ "version": "1.1.1",
4936+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
4937+ "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
4938+ "dev": true,
4939+ "license": "MIT",
4940+ "dependencies": {
4941+ "call-bound": "^1.0.3",
4942+ "has-tostringtag": "^1.0.2"
4943+ },
4944+ "engines": {
4945+ "node": ">= 0.4"
4946+ },
4947+ "funding": {
4948+ "url": "https://github.com/sponsors/ljharb"
4949+ }
4950+ },
4951+ "node_modules/is-regex": {
4952+ "version": "1.2.1",
4953+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
4954+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
4955+ "dev": true,
4956+ "license": "MIT",
4957+ "dependencies": {
4958+ "call-bound": "^1.0.2",
4959+ "gopd": "^1.2.0",
4960+ "has-tostringtag": "^1.0.2",
4961+ "hasown": "^2.0.2"
4962+ },
4963+ "engines": {
4964+ "node": ">= 0.4"
4965+ },
4966+ "funding": {
4967+ "url": "https://github.com/sponsors/ljharb"
4968+ }
4969+ },
4970+ "node_modules/is-set": {
4971+ "version": "2.0.3",
4972+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
4973+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
4974+ "dev": true,
4975+ "license": "MIT",
4976+ "engines": {
4977+ "node": ">= 0.4"
4978+ },
4979+ "funding": {
4980+ "url": "https://github.com/sponsors/ljharb"
4981+ }
4982+ },
4983+ "node_modules/is-shared-array-buffer": {
4984+ "version": "1.0.4",
4985+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
4986+ "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
4987+ "dev": true,
4988+ "license": "MIT",
4989+ "dependencies": {
4990+ "call-bound": "^1.0.3"
4991+ },
4992+ "engines": {
4993+ "node": ">= 0.4"
4994+ },
4995+ "funding": {
4996+ "url": "https://github.com/sponsors/ljharb"
4997+ }
4998+ },
4999+ "node_modules/is-string": {
5000+ "version": "1.1.1",
5001+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
5002+ "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
5003+ "dev": true,
5004+ "license": "MIT",
5005+ "dependencies": {
5006+ "call-bound": "^1.0.3",
5007+ "has-tostringtag": "^1.0.2"
5008+ },
5009+ "engines": {
5010+ "node": ">= 0.4"
5011+ },
5012+ "funding": {
5013+ "url": "https://github.com/sponsors/ljharb"
5014+ }
5015+ },
5016+ "node_modules/is-symbol": {
5017+ "version": "1.1.1",
5018+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
5019+ "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
5020+ "dev": true,
5021+ "license": "MIT",
5022+ "dependencies": {
5023+ "call-bound": "^1.0.2",
5024+ "has-symbols": "^1.1.0",
5025+ "safe-regex-test": "^1.1.0"
5026+ },
5027+ "engines": {
5028+ "node": ">= 0.4"
5029+ },
5030+ "funding": {
5031+ "url": "https://github.com/sponsors/ljharb"
5032+ }
5033+ },
5034+ "node_modules/is-typed-array": {
5035+ "version": "1.1.15",
5036+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
5037+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
5038+ "dev": true,
5039+ "license": "MIT",
5040+ "dependencies": {
5041+ "which-typed-array": "^1.1.16"
5042+ },
5043+ "engines": {
5044+ "node": ">= 0.4"
5045+ },
5046+ "funding": {
5047+ "url": "https://github.com/sponsors/ljharb"
5048+ }
5049+ },
5050+ "node_modules/is-weakmap": {
5051+ "version": "2.0.2",
5052+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
5053+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
5054+ "dev": true,
5055+ "license": "MIT",
5056+ "engines": {
5057+ "node": ">= 0.4"
5058+ },
5059+ "funding": {
5060+ "url": "https://github.com/sponsors/ljharb"
5061+ }
5062+ },
5063+ "node_modules/is-weakref": {
5064+ "version": "1.1.1",
5065+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
5066+ "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
5067+ "dev": true,
5068+ "license": "MIT",
5069+ "dependencies": {
5070+ "call-bound": "^1.0.3"
5071+ },
5072+ "engines": {
5073+ "node": ">= 0.4"
5074+ },
5075+ "funding": {
5076+ "url": "https://github.com/sponsors/ljharb"
5077+ }
5078+ },
5079+ "node_modules/is-weakset": {
5080+ "version": "2.0.4",
5081+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
5082+ "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
5083+ "dev": true,
5084+ "license": "MIT",
5085+ "dependencies": {
5086+ "call-bound": "^1.0.3",
5087+ "get-intrinsic": "^1.2.6"
5088+ },
5089+ "engines": {
5090+ "node": ">= 0.4"
5091+ },
5092+ "funding": {
5093+ "url": "https://github.com/sponsors/ljharb"
5094+ }
5095+ },
5096+ "node_modules/isarray": {
5097+ "version": "2.0.5",
5098+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
5099+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
5100+ "dev": true,
5101+ "license": "MIT"
5102+ },
5103+ "node_modules/isexe": {
5104+ "version": "2.0.0",
5105+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
5106+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
5107+ "dev": true,
5108+ "license": "ISC"
5109+ },
5110+ "node_modules/iterator.prototype": {
5111+ "version": "1.1.5",
5112+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
5113+ "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
5114+ "dev": true,
5115+ "license": "MIT",
5116+ "dependencies": {
5117+ "define-data-property": "^1.1.4",
5118+ "es-object-atoms": "^1.0.0",
5119+ "get-intrinsic": "^1.2.6",
5120+ "get-proto": "^1.0.0",
5121+ "has-symbols": "^1.1.0",
5122+ "set-function-name": "^2.0.2"
5123+ },
5124+ "engines": {
5125+ "node": ">= 0.4"
5126+ }
5127+ },
5128+ "node_modules/jiti": {
5129+ "version": "2.7.0",
5130+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz",
5131+ "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==",
5132+ "dev": true,
5133+ "license": "MIT",
5134+ "bin": {
5135+ "jiti": "lib/jiti-cli.mjs"
5136+ }
5137+ },
5138+ "node_modules/js-tokens": {
5139+ "version": "4.0.0",
5140+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
5141+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
5142+ "dev": true,
5143+ "license": "MIT"
5144+ },
5145+ "node_modules/js-yaml": {
5146+ "version": "4.3.1",
5147+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
5148+ "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
5149+ "dev": true,
5150+ "funding": [
5151+ {
5152+ "type": "github",
5153+ "url": "https://github.com/sponsors/puzrin"
5154+ },
5155+ {
5156+ "type": "github",
5157+ "url": "https://github.com/sponsors/nodeca"
5158+ }
5159+ ],
5160+ "license": "MIT",
5161+ "dependencies": {
5162+ "argparse": "^2.0.1"
5163+ },
5164+ "bin": {
5165+ "js-yaml": "bin/js-yaml.js"
5166+ }
5167+ },
5168+ "node_modules/jsesc": {
5169+ "version": "3.1.0",
5170+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
5171+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
5172+ "dev": true,
5173+ "license": "MIT",
5174+ "bin": {
5175+ "jsesc": "bin/jsesc"
5176+ },
5177+ "engines": {
5178+ "node": ">=6"
5179+ }
5180+ },
5181+ "node_modules/json-buffer": {
5182+ "version": "3.0.1",
5183+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
5184+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
5185+ "dev": true,
5186+ "license": "MIT"
5187+ },
5188+ "node_modules/json-schema-traverse": {
5189+ "version": "0.4.1",
5190+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
5191+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
5192+ "dev": true,
5193+ "license": "MIT"
5194+ },
5195+ "node_modules/json-stable-stringify-without-jsonify": {
5196+ "version": "1.0.1",
5197+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
5198+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
5199+ "dev": true,
5200+ "license": "MIT"
5201+ },
5202+ "node_modules/json5": {
5203+ "version": "2.2.3",
5204+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
5205+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
5206+ "dev": true,
5207+ "license": "MIT",
5208+ "bin": {
5209+ "json5": "lib/cli.js"
5210+ },
5211+ "engines": {
5212+ "node": ">=6"
5213+ }
5214+ },
5215+ "node_modules/jsx-ast-utils": {
5216+ "version": "3.3.5",
5217+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
5218+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
5219+ "dev": true,
5220+ "license": "MIT",
5221+ "dependencies": {
5222+ "array-includes": "^3.1.6",
5223+ "array.prototype.flat": "^1.3.1",
5224+ "object.assign": "^4.1.4",
5225+ "object.values": "^1.1.6"
5226+ },
5227+ "engines": {
5228+ "node": ">=4.0"
5229+ }
5230+ },
5231+ "node_modules/keyv": {
5232+ "version": "4.5.4",
5233+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
5234+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
5235+ "dev": true,
5236+ "license": "MIT",
5237+ "dependencies": {
5238+ "json-buffer": "3.0.1"
5239+ }
5240+ },
5241+ "node_modules/language-subtag-registry": {
5242+ "version": "0.3.23",
5243+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
5244+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
5245+ "dev": true,
5246+ "license": "CC0-1.0"
5247+ },
5248+ "node_modules/language-tags": {
5249+ "version": "1.0.9",
5250+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
5251+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
5252+ "dev": true,
5253+ "license": "MIT",
5254+ "dependencies": {
5255+ "language-subtag-registry": "^0.3.20"
5256+ },
5257+ "engines": {
5258+ "node": ">=0.10"
5259+ }
5260+ },
5261+ "node_modules/levn": {
5262+ "version": "0.4.1",
5263+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
5264+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
5265+ "dev": true,
5266+ "license": "MIT",
5267+ "dependencies": {
5268+ "prelude-ls": "^1.2.1",
5269+ "type-check": "~0.4.0"
5270+ },
5271+ "engines": {
5272+ "node": ">= 0.8.0"
5273+ }
5274+ },
5275+ "node_modules/lightningcss": {
5276+ "version": "1.32.0",
5277+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
5278+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
5279+ "dev": true,
5280+ "license": "MPL-2.0",
5281+ "dependencies": {
5282+ "detect-libc": "^2.0.3"
5283+ },
5284+ "engines": {
5285+ "node": ">= 12.0.0"
5286+ },
5287+ "funding": {
5288+ "type": "opencollective",
5289+ "url": "https://opencollective.com/parcel"
5290+ },
5291+ "optionalDependencies": {
5292+ "lightningcss-android-arm64": "1.32.0",
5293+ "lightningcss-darwin-arm64": "1.32.0",
5294+ "lightningcss-darwin-x64": "1.32.0",
5295+ "lightningcss-freebsd-x64": "1.32.0",
5296+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
5297+ "lightningcss-linux-arm64-gnu": "1.32.0",
5298+ "lightningcss-linux-arm64-musl": "1.32.0",
5299+ "lightningcss-linux-x64-gnu": "1.32.0",
5300+ "lightningcss-linux-x64-musl": "1.32.0",
5301+ "lightningcss-win32-arm64-msvc": "1.32.0",
5302+ "lightningcss-win32-x64-msvc": "1.32.0"
5303+ }
5304+ },
5305+ "node_modules/lightningcss-android-arm64": {
5306+ "version": "1.32.0",
5307+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
5308+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
5309+ "cpu": [
5310+ "arm64"
5311+ ],
5312+ "dev": true,
5313+ "license": "MPL-2.0",
5314+ "optional": true,
5315+ "os": [
5316+ "android"
5317+ ],
5318+ "engines": {
5319+ "node": ">= 12.0.0"
5320+ },
5321+ "funding": {
5322+ "type": "opencollective",
5323+ "url": "https://opencollective.com/parcel"
5324+ }
5325+ },
5326+ "node_modules/lightningcss-darwin-arm64": {
5327+ "version": "1.32.0",
5328+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
5329+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
5330+ "cpu": [
5331+ "arm64"
5332+ ],
5333+ "dev": true,
5334+ "license": "MPL-2.0",
5335+ "optional": true,
5336+ "os": [
5337+ "darwin"
5338+ ],
5339+ "engines": {
5340+ "node": ">= 12.0.0"
5341+ },
5342+ "funding": {
5343+ "type": "opencollective",
5344+ "url": "https://opencollective.com/parcel"
5345+ }
5346+ },
5347+ "node_modules/lightningcss-darwin-x64": {
5348+ "version": "1.32.0",
5349+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
5350+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
5351+ "cpu": [
5352+ "x64"
5353+ ],
5354+ "dev": true,
5355+ "license": "MPL-2.0",
5356+ "optional": true,
5357+ "os": [
5358+ "darwin"
5359+ ],
5360+ "engines": {
5361+ "node": ">= 12.0.0"
5362+ },
5363+ "funding": {
5364+ "type": "opencollective",
5365+ "url": "https://opencollective.com/parcel"
5366+ }
5367+ },
5368+ "node_modules/lightningcss-freebsd-x64": {
5369+ "version": "1.32.0",
5370+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
5371+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
5372+ "cpu": [
5373+ "x64"
5374+ ],
5375+ "dev": true,
5376+ "license": "MPL-2.0",
5377+ "optional": true,
5378+ "os": [
5379+ "freebsd"
5380+ ],
5381+ "engines": {
5382+ "node": ">= 12.0.0"
5383+ },
5384+ "funding": {
5385+ "type": "opencollective",
5386+ "url": "https://opencollective.com/parcel"
5387+ }
5388+ },
5389+ "node_modules/lightningcss-linux-arm-gnueabihf": {
5390+ "version": "1.32.0",
5391+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
5392+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
5393+ "cpu": [
5394+ "arm"
5395+ ],
5396+ "dev": true,
5397+ "license": "MPL-2.0",
5398+ "optional": true,
5399+ "os": [
5400+ "linux"
5401+ ],
5402+ "engines": {
5403+ "node": ">= 12.0.0"
5404+ },
5405+ "funding": {
5406+ "type": "opencollective",
5407+ "url": "https://opencollective.com/parcel"
5408+ }
5409+ },
5410+ "node_modules/lightningcss-linux-arm64-gnu": {
5411+ "version": "1.32.0",
5412+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
5413+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
5414+ "cpu": [
5415+ "arm64"
5416+ ],
5417+ "dev": true,
5418+ "libc": [
5419+ "glibc"
5420+ ],
5421+ "license": "MPL-2.0",
5422+ "optional": true,
5423+ "os": [
5424+ "linux"
5425+ ],
5426+ "engines": {
5427+ "node": ">= 12.0.0"
5428+ },
5429+ "funding": {
5430+ "type": "opencollective",
5431+ "url": "https://opencollective.com/parcel"
5432+ }
5433+ },
5434+ "node_modules/lightningcss-linux-arm64-musl": {
5435+ "version": "1.32.0",
5436+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
5437+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
5438+ "cpu": [
5439+ "arm64"
5440+ ],
5441+ "dev": true,
5442+ "libc": [
5443+ "musl"
5444+ ],
5445+ "license": "MPL-2.0",
5446+ "optional": true,
5447+ "os": [
5448+ "linux"
5449+ ],
5450+ "engines": {
5451+ "node": ">= 12.0.0"
5452+ },
5453+ "funding": {
5454+ "type": "opencollective",
5455+ "url": "https://opencollective.com/parcel"
5456+ }
5457+ },
5458+ "node_modules/lightningcss-linux-x64-gnu": {
5459+ "version": "1.32.0",
5460+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
5461+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
5462+ "cpu": [
5463+ "x64"
5464+ ],
5465+ "dev": true,
5466+ "libc": [
5467+ "glibc"
5468+ ],
5469+ "license": "MPL-2.0",
5470+ "optional": true,
5471+ "os": [
5472+ "linux"
5473+ ],
5474+ "engines": {
5475+ "node": ">= 12.0.0"
5476+ },
5477+ "funding": {
5478+ "type": "opencollective",
5479+ "url": "https://opencollective.com/parcel"
5480+ }
5481+ },
5482+ "node_modules/lightningcss-linux-x64-musl": {
5483+ "version": "1.32.0",
5484+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
5485+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
5486+ "cpu": [
5487+ "x64"
5488+ ],
5489+ "dev": true,
5490+ "libc": [
5491+ "musl"
5492+ ],
5493+ "license": "MPL-2.0",
5494+ "optional": true,
5495+ "os": [
5496+ "linux"
5497+ ],
5498+ "engines": {
5499+ "node": ">= 12.0.0"
5500+ },
5501+ "funding": {
5502+ "type": "opencollective",
5503+ "url": "https://opencollective.com/parcel"
5504+ }
5505+ },
5506+ "node_modules/lightningcss-win32-arm64-msvc": {
5507+ "version": "1.32.0",
5508+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
5509+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
5510+ "cpu": [
5511+ "arm64"
5512+ ],
5513+ "dev": true,
5514+ "license": "MPL-2.0",
5515+ "optional": true,
5516+ "os": [
5517+ "win32"
5518+ ],
5519+ "engines": {
5520+ "node": ">= 12.0.0"
5521+ },
5522+ "funding": {
5523+ "type": "opencollective",
5524+ "url": "https://opencollective.com/parcel"
5525+ }
5526+ },
5527+ "node_modules/lightningcss-win32-x64-msvc": {
5528+ "version": "1.32.0",
5529+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
5530+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
5531+ "cpu": [
5532+ "x64"
5533+ ],
5534+ "dev": true,
5535+ "license": "MPL-2.0",
5536+ "optional": true,
5537+ "os": [
5538+ "win32"
5539+ ],
5540+ "engines": {
5541+ "node": ">= 12.0.0"
5542+ },
5543+ "funding": {
5544+ "type": "opencollective",
5545+ "url": "https://opencollective.com/parcel"
5546+ }
5547+ },
5548+ "node_modules/locate-path": {
5549+ "version": "6.0.0",
5550+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
5551+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
5552+ "dev": true,
5553+ "license": "MIT",
5554+ "dependencies": {
5555+ "p-locate": "^5.0.0"
5556+ },
5557+ "engines": {
5558+ "node": ">=10"
5559+ },
5560+ "funding": {
5561+ "url": "https://github.com/sponsors/sindresorhus"
5562+ }
5563+ },
5564+ "node_modules/lodash.merge": {
5565+ "version": "4.6.2",
5566+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
5567+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
5568+ "dev": true,
5569+ "license": "MIT"
5570+ },
5571+ "node_modules/loose-envify": {
5572+ "version": "1.4.0",
5573+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
5574+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
5575+ "dev": true,
5576+ "license": "MIT",
5577+ "dependencies": {
5578+ "js-tokens": "^3.0.0 || ^4.0.0"
5579+ },
5580+ "bin": {
5581+ "loose-envify": "cli.js"
5582+ }
5583+ },
5584+ "node_modules/lru-cache": {
5585+ "version": "5.1.1",
5586+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
5587+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
5588+ "dev": true,
5589+ "license": "ISC",
5590+ "dependencies": {
5591+ "yallist": "^3.0.2"
5592+ }
5593+ },
5594+ "node_modules/magic-string": {
5595+ "version": "0.30.21",
5596+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
5597+ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
5598+ "dev": true,
5599+ "license": "MIT",
5600+ "dependencies": {
5601+ "@jridgewell/sourcemap-codec": "^1.5.5"
5602+ }
5603+ },
5604+ "node_modules/math-intrinsics": {
5605+ "version": "1.1.0",
5606+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
5607+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
5608+ "dev": true,
5609+ "license": "MIT",
5610+ "engines": {
5611+ "node": ">= 0.4"
5612+ }
5613+ },
5614+ "node_modules/merge2": {
5615+ "version": "1.4.1",
5616+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
5617+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
5618+ "dev": true,
5619+ "license": "MIT",
5620+ "engines": {
5621+ "node": ">= 8"
5622+ }
5623+ },
5624+ "node_modules/micromatch": {
5625+ "version": "4.0.8",
5626+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
5627+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
5628+ "dev": true,
5629+ "license": "MIT",
5630+ "dependencies": {
5631+ "braces": "^3.0.3",
5632+ "picomatch": "^2.3.1"
5633+ },
5634+ "engines": {
5635+ "node": ">=8.6"
5636+ }
5637+ },
5638+ "node_modules/minimatch": {
5639+ "version": "3.1.5",
5640+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
5641+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
5642+ "dev": true,
5643+ "license": "ISC",
5644+ "dependencies": {
5645+ "brace-expansion": "^1.1.7"
5646+ },
5647+ "engines": {
5648+ "node": "*"
5649+ }
5650+ },
5651+ "node_modules/minimist": {
5652+ "version": "1.2.8",
5653+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
5654+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
5655+ "dev": true,
5656+ "license": "MIT",
5657+ "funding": {
5658+ "url": "https://github.com/sponsors/ljharb"
5659+ }
5660+ },
5661+ "node_modules/ms": {
5662+ "version": "2.1.3",
5663+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
5664+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
5665+ "dev": true,
5666+ "license": "MIT"
5667+ },
5668+ "node_modules/nanoid": {
5669+ "version": "3.3.17",
5670+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz",
5671+ "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==",
5672+ "funding": [
5673+ {
5674+ "type": "github",
5675+ "url": "https://github.com/sponsors/ai"
5676+ }
5677+ ],
5678+ "license": "MIT",
5679+ "bin": {
5680+ "nanoid": "bin/nanoid.cjs"
5681+ },
5682+ "engines": {
5683+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
5684+ }
5685+ },
5686+ "node_modules/napi-postinstall": {
5687+ "version": "0.3.4",
5688+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
5689+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
5690+ "dev": true,
5691+ "license": "MIT",
5692+ "bin": {
5693+ "napi-postinstall": "lib/cli.js"
5694+ },
5695+ "engines": {
5696+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
5697+ },
5698+ "funding": {
5699+ "url": "https://opencollective.com/napi-postinstall"
5700+ }
5701+ },
5702+ "node_modules/natural-compare": {
5703+ "version": "1.4.0",
5704+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
5705+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
5706+ "dev": true,
5707+ "license": "MIT"
5708+ },
5709+ "node_modules/next": {
5710+ "version": "16.2.12",
5711+ "resolved": "https://registry.npmjs.org/next/-/next-16.2.12.tgz",
5712+ "integrity": "sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==",
5713+ "license": "MIT",
5714+ "dependencies": {
5715+ "@next/env": "16.2.12",
5716+ "@swc/helpers": "0.5.15",
5717+ "baseline-browser-mapping": "^2.9.19",
5718+ "caniuse-lite": "^1.0.30001579",
5719+ "postcss": "8.4.31",
5720+ "styled-jsx": "5.1.6"
5721+ },
5722+ "bin": {
5723+ "next": "dist/bin/next"
5724+ },
5725+ "engines": {
5726+ "node": ">=20.9.0"
5727+ },
5728+ "optionalDependencies": {
5729+ "@next/swc-darwin-arm64": "16.2.12",
5730+ "@next/swc-darwin-x64": "16.2.12",
5731+ "@next/swc-linux-arm64-gnu": "16.2.12",
5732+ "@next/swc-linux-arm64-musl": "16.2.12",
5733+ "@next/swc-linux-x64-gnu": "16.2.12",
5734+ "@next/swc-linux-x64-musl": "16.2.12",
5735+ "@next/swc-win32-arm64-msvc": "16.2.12",
5736+ "@next/swc-win32-x64-msvc": "16.2.12",
5737+ "sharp": "^0.34.5"
5738+ },
5739+ "peerDependencies": {
5740+ "@opentelemetry/api": "^1.1.0",
5741+ "@playwright/test": "^1.51.1",
5742+ "babel-plugin-react-compiler": "*",
5743+ "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
5744+ "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
5745+ "sass": "^1.3.0"
5746+ },
5747+ "peerDependenciesMeta": {
5748+ "@opentelemetry/api": {
5749+ "optional": true
5750+ },
5751+ "@playwright/test": {
5752+ "optional": true
5753+ },
5754+ "babel-plugin-react-compiler": {
5755+ "optional": true
5756+ },
5757+ "sass": {
5758+ "optional": true
5759+ }
5760+ }
5761+ },
5762+ "node_modules/next/node_modules/postcss": {
5763+ "version": "8.4.31",
5764+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
5765+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
5766+ "funding": [
5767+ {
5768+ "type": "opencollective",
5769+ "url": "https://opencollective.com/postcss/"
5770+ },
5771+ {
5772+ "type": "tidelift",
5773+ "url": "https://tidelift.com/funding/github/npm/postcss"
5774+ },
5775+ {
5776+ "type": "github",
5777+ "url": "https://github.com/sponsors/ai"
5778+ }
5779+ ],
5780+ "license": "MIT",
5781+ "dependencies": {
5782+ "nanoid": "^3.3.6",
5783+ "picocolors": "^1.0.0",
5784+ "source-map-js": "^1.0.2"
5785+ },
5786+ "engines": {
5787+ "node": "^10 || ^12 || >=14"
5788+ }
5789+ },
5790+ "node_modules/node-exports-info": {
5791+ "version": "1.6.2",
5792+ "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz",
5793+ "integrity": "sha512-kXs9Go0cah0qHVV2v389IXQLdLCeE1xfFtjOAF+iobu0OIoG1pje8At2vMHyaPMiPMnG/LWP50twML21eMcAag==",
5794+ "dev": true,
5795+ "license": "MIT",
5796+ "dependencies": {
5797+ "array.prototype.flatmap": "^1.3.3",
5798+ "es-errors": "^1.3.0",
5799+ "object.entries": "^1.1.9",
5800+ "semver": "^6.3.1"
5801+ },
5802+ "engines": {
5803+ "node": ">= 0.4"
5804+ },
5805+ "funding": {
5806+ "url": "https://github.com/sponsors/ljharb"
5807+ }
5808+ },
5809+ "node_modules/node-releases": {
5810+ "version": "2.0.51",
5811+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz",
5812+ "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==",
5813+ "dev": true,
5814+ "license": "MIT",
5815+ "engines": {
5816+ "node": ">=18"
5817+ }
5818+ },
5819+ "node_modules/object-assign": {
5820+ "version": "4.1.1",
5821+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
5822+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
5823+ "dev": true,
5824+ "license": "MIT",
5825+ "engines": {
5826+ "node": ">=0.10.0"
5827+ }
5828+ },
5829+ "node_modules/object-inspect": {
5830+ "version": "1.13.4",
5831+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
5832+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
5833+ "dev": true,
5834+ "license": "MIT",
5835+ "engines": {
5836+ "node": ">= 0.4"
5837+ },
5838+ "funding": {
5839+ "url": "https://github.com/sponsors/ljharb"
5840+ }
5841+ },
5842+ "node_modules/object-keys": {
5843+ "version": "1.1.1",
5844+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
5845+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
5846+ "dev": true,
5847+ "license": "MIT",
5848+ "engines": {
5849+ "node": ">= 0.4"
5850+ }
5851+ },
5852+ "node_modules/object.assign": {
5853+ "version": "4.1.7",
5854+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
5855+ "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
5856+ "dev": true,
5857+ "license": "MIT",
5858+ "dependencies": {
5859+ "call-bind": "^1.0.8",
5860+ "call-bound": "^1.0.3",
5861+ "define-properties": "^1.2.1",
5862+ "es-object-atoms": "^1.0.0",
5863+ "has-symbols": "^1.1.0",
5864+ "object-keys": "^1.1.1"
5865+ },
5866+ "engines": {
5867+ "node": ">= 0.4"
5868+ },
5869+ "funding": {
5870+ "url": "https://github.com/sponsors/ljharb"
5871+ }
5872+ },
5873+ "node_modules/object.entries": {
5874+ "version": "1.1.9",
5875+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
5876+ "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
5877+ "dev": true,
5878+ "license": "MIT",
5879+ "dependencies": {
5880+ "call-bind": "^1.0.8",
5881+ "call-bound": "^1.0.4",
5882+ "define-properties": "^1.2.1",
5883+ "es-object-atoms": "^1.1.1"
5884+ },
5885+ "engines": {
5886+ "node": ">= 0.4"
5887+ }
5888+ },
5889+ "node_modules/object.fromentries": {
5890+ "version": "2.0.8",
5891+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
5892+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
5893+ "dev": true,
5894+ "license": "MIT",
5895+ "dependencies": {
5896+ "call-bind": "^1.0.7",
5897+ "define-properties": "^1.2.1",
5898+ "es-abstract": "^1.23.2",
5899+ "es-object-atoms": "^1.0.0"
5900+ },
5901+ "engines": {
5902+ "node": ">= 0.4"
5903+ },
5904+ "funding": {
5905+ "url": "https://github.com/sponsors/ljharb"
5906+ }
5907+ },
5908+ "node_modules/object.groupby": {
5909+ "version": "1.0.3",
5910+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
5911+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
5912+ "dev": true,
5913+ "license": "MIT",
5914+ "dependencies": {
5915+ "call-bind": "^1.0.7",
5916+ "define-properties": "^1.2.1",
5917+ "es-abstract": "^1.23.2"
5918+ },
5919+ "engines": {
5920+ "node": ">= 0.4"
5921+ }
5922+ },
5923+ "node_modules/object.values": {
5924+ "version": "1.2.1",
5925+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
5926+ "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
5927+ "dev": true,
5928+ "license": "MIT",
5929+ "dependencies": {
5930+ "call-bind": "^1.0.8",
5931+ "call-bound": "^1.0.3",
5932+ "define-properties": "^1.2.1",
5933+ "es-object-atoms": "^1.0.0"
5934+ },
5935+ "engines": {
5936+ "node": ">= 0.4"
5937+ },
5938+ "funding": {
5939+ "url": "https://github.com/sponsors/ljharb"
5940+ }
5941+ },
5942+ "node_modules/optionator": {
5943+ "version": "0.9.4",
5944+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
5945+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
5946+ "dev": true,
5947+ "license": "MIT",
5948+ "dependencies": {
5949+ "deep-is": "^0.1.3",
5950+ "fast-levenshtein": "^2.0.6",
5951+ "levn": "^0.4.1",
5952+ "prelude-ls": "^1.2.1",
5953+ "type-check": "^0.4.0",
5954+ "word-wrap": "^1.2.5"
5955+ },
5956+ "engines": {
5957+ "node": ">= 0.8.0"
5958+ }
5959+ },
5960+ "node_modules/own-keys": {
5961+ "version": "1.0.2",
5962+ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.2.tgz",
5963+ "integrity": "sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==",
5964+ "dev": true,
5965+ "license": "MIT",
5966+ "dependencies": {
5967+ "call-bound": "^1.0.4",
5968+ "get-intrinsic": "^1.3.0",
5969+ "object-keys": "^1.1.1",
5970+ "safe-push-apply": "^1.0.0"
5971+ },
5972+ "engines": {
5973+ "node": ">= 0.4"
5974+ },
5975+ "funding": {
5976+ "url": "https://github.com/sponsors/ljharb"
5977+ }
5978+ },
5979+ "node_modules/p-limit": {
5980+ "version": "3.1.0",
5981+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
5982+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
5983+ "dev": true,
5984+ "license": "MIT",
5985+ "dependencies": {
5986+ "yocto-queue": "^0.1.0"
5987+ },
5988+ "engines": {
5989+ "node": ">=10"
5990+ },
5991+ "funding": {
5992+ "url": "https://github.com/sponsors/sindresorhus"
5993+ }
5994+ },
5995+ "node_modules/p-locate": {
5996+ "version": "5.0.0",
5997+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
5998+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
5999+ "dev": true,
6000+ "license": "MIT",
6001+ "dependencies": {
6002+ "p-limit": "^3.0.2"
6003+ },
6004+ "engines": {
6005+ "node": ">=10"
6006+ },
6007+ "funding": {
6008+ "url": "https://github.com/sponsors/sindresorhus"
6009+ }
6010+ },
6011+ "node_modules/parent-module": {
6012+ "version": "1.0.1",
6013+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
6014+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
6015+ "dev": true,
6016+ "license": "MIT",
6017+ "dependencies": {
6018+ "callsites": "^3.0.0"
6019+ },
6020+ "engines": {
6021+ "node": ">=6"
6022+ }
6023+ },
6024+ "node_modules/path-exists": {
6025+ "version": "4.0.0",
6026+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
6027+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
6028+ "dev": true,
6029+ "license": "MIT",
6030+ "engines": {
6031+ "node": ">=8"
6032+ }
6033+ },
6034+ "node_modules/path-key": {
6035+ "version": "3.1.1",
6036+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
6037+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
6038+ "dev": true,
6039+ "license": "MIT",
6040+ "engines": {
6041+ "node": ">=8"
6042+ }
6043+ },
6044+ "node_modules/path-parse": {
6045+ "version": "1.0.7",
6046+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
6047+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
6048+ "dev": true,
6049+ "license": "MIT"
6050+ },
6051+ "node_modules/picocolors": {
6052+ "version": "1.1.1",
6053+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
6054+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
6055+ "license": "ISC"
6056+ },
6057+ "node_modules/picomatch": {
6058+ "version": "2.3.2",
6059+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
6060+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
6061+ "dev": true,
6062+ "license": "MIT",
6063+ "engines": {
6064+ "node": ">=8.6"
6065+ },
6066+ "funding": {
6067+ "url": "https://github.com/sponsors/jonschlinkert"
6068+ }
6069+ },
6070+ "node_modules/possible-typed-array-names": {
6071+ "version": "1.1.0",
6072+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
6073+ "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
6074+ "dev": true,
6075+ "license": "MIT",
6076+ "engines": {
6077+ "node": ">= 0.4"
6078+ }
6079+ },
6080+ "node_modules/postcss": {
6081+ "version": "8.5.25",
6082+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz",
6083+ "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==",
6084+ "dev": true,
6085+ "funding": [
6086+ {
6087+ "type": "opencollective",
6088+ "url": "https://opencollective.com/postcss/"
6089+ },
6090+ {
6091+ "type": "tidelift",
6092+ "url": "https://tidelift.com/funding/github/npm/postcss"
6093+ },
6094+ {
6095+ "type": "github",
6096+ "url": "https://github.com/sponsors/ai"
6097+ }
6098+ ],
6099+ "license": "MIT",
6100+ "dependencies": {
6101+ "nanoid": "^3.3.16",
6102+ "picocolors": "^1.1.1",
6103+ "source-map-js": "^1.2.1"
6104+ },
6105+ "engines": {
6106+ "node": "^10 || ^12 || >=14"
6107+ }
6108+ },
6109+ "node_modules/prelude-ls": {
6110+ "version": "1.2.1",
6111+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
6112+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
6113+ "dev": true,
6114+ "license": "MIT",
6115+ "engines": {
6116+ "node": ">= 0.8.0"
6117+ }
6118+ },
6119+ "node_modules/prop-types": {
6120+ "version": "15.8.1",
6121+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
6122+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
6123+ "dev": true,
6124+ "license": "MIT",
6125+ "dependencies": {
6126+ "loose-envify": "^1.4.0",
6127+ "object-assign": "^4.1.1",
6128+ "react-is": "^16.13.1"
6129+ }
6130+ },
6131+ "node_modules/punycode": {
6132+ "version": "2.3.1",
6133+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
6134+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
6135+ "dev": true,
6136+ "license": "MIT",
6137+ "engines": {
6138+ "node": ">=6"
6139+ }
6140+ },
6141+ "node_modules/queue-microtask": {
6142+ "version": "1.2.3",
6143+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
6144+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
6145+ "dev": true,
6146+ "funding": [
6147+ {
6148+ "type": "github",
6149+ "url": "https://github.com/sponsors/feross"
6150+ },
6151+ {
6152+ "type": "patreon",
6153+ "url": "https://www.patreon.com/feross"
6154+ },
6155+ {
6156+ "type": "consulting",
6157+ "url": "https://feross.org/support"
6158+ }
6159+ ],
6160+ "license": "MIT"
6161+ },
6162+ "node_modules/react": {
6163+ "version": "19.2.8",
6164+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz",
6165+ "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
6166+ "license": "MIT",
6167+ "engines": {
6168+ "node": ">=0.10.0"
6169+ }
6170+ },
6171+ "node_modules/react-dom": {
6172+ "version": "19.2.8",
6173+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz",
6174+ "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==",
6175+ "license": "MIT",
6176+ "dependencies": {
6177+ "scheduler": "^0.27.0"
6178+ },
6179+ "peerDependencies": {
6180+ "react": "^19.2.8"
6181+ }
6182+ },
6183+ "node_modules/react-is": {
6184+ "version": "16.13.1",
6185+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
6186+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
6187+ "dev": true,
6188+ "license": "MIT"
6189+ },
6190+ "node_modules/reflect.getprototypeof": {
6191+ "version": "1.0.10",
6192+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
6193+ "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
6194+ "dev": true,
6195+ "license": "MIT",
6196+ "dependencies": {
6197+ "call-bind": "^1.0.8",
6198+ "define-properties": "^1.2.1",
6199+ "es-abstract": "^1.23.9",
6200+ "es-errors": "^1.3.0",
6201+ "es-object-atoms": "^1.0.0",
6202+ "get-intrinsic": "^1.2.7",
6203+ "get-proto": "^1.0.1",
6204+ "which-builtin-type": "^1.2.1"
6205+ },
6206+ "engines": {
6207+ "node": ">= 0.4"
6208+ },
6209+ "funding": {
6210+ "url": "https://github.com/sponsors/ljharb"
6211+ }
6212+ },
6213+ "node_modules/regexp.prototype.flags": {
6214+ "version": "1.5.4",
6215+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
6216+ "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
6217+ "dev": true,
6218+ "license": "MIT",
6219+ "dependencies": {
6220+ "call-bind": "^1.0.8",
6221+ "define-properties": "^1.2.1",
6222+ "es-errors": "^1.3.0",
6223+ "get-proto": "^1.0.1",
6224+ "gopd": "^1.2.0",
6225+ "set-function-name": "^2.0.2"
6226+ },
6227+ "engines": {
6228+ "node": ">= 0.4"
6229+ },
6230+ "funding": {
6231+ "url": "https://github.com/sponsors/ljharb"
6232+ }
6233+ },
6234+ "node_modules/resolve": {
6235+ "version": "2.0.0-next.7",
6236+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.7.tgz",
6237+ "integrity": "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==",
6238+ "dev": true,
6239+ "license": "MIT",
6240+ "dependencies": {
6241+ "es-errors": "^1.3.0",
6242+ "is-core-module": "^2.16.2",
6243+ "node-exports-info": "^1.6.0",
6244+ "object-keys": "^1.1.1",
6245+ "path-parse": "^1.0.7",
6246+ "supports-preserve-symlinks-flag": "^1.0.0"
6247+ },
6248+ "bin": {
6249+ "resolve": "bin/resolve"
6250+ },
6251+ "engines": {
6252+ "node": ">= 0.4"
6253+ },
6254+ "funding": {
6255+ "url": "https://github.com/sponsors/ljharb"
6256+ }
6257+ },
6258+ "node_modules/resolve-from": {
6259+ "version": "4.0.0",
6260+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
6261+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
6262+ "dev": true,
6263+ "license": "MIT",
6264+ "engines": {
6265+ "node": ">=4"
6266+ }
6267+ },
6268+ "node_modules/resolve-pkg-maps": {
6269+ "version": "1.0.0",
6270+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
6271+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
6272+ "dev": true,
6273+ "license": "MIT",
6274+ "funding": {
6275+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
6276+ }
6277+ },
6278+ "node_modules/reusify": {
6279+ "version": "1.1.0",
6280+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
6281+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
6282+ "dev": true,
6283+ "license": "MIT",
6284+ "engines": {
6285+ "iojs": ">=1.0.0",
6286+ "node": ">=0.10.0"
6287+ }
6288+ },
6289+ "node_modules/run-parallel": {
6290+ "version": "1.2.0",
6291+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
6292+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
6293+ "dev": true,
6294+ "funding": [
6295+ {
6296+ "type": "github",
6297+ "url": "https://github.com/sponsors/feross"
6298+ },
6299+ {
6300+ "type": "patreon",
6301+ "url": "https://www.patreon.com/feross"
6302+ },
6303+ {
6304+ "type": "consulting",
6305+ "url": "https://feross.org/support"
6306+ }
6307+ ],
6308+ "license": "MIT",
6309+ "dependencies": {
6310+ "queue-microtask": "^1.2.2"
6311+ }
6312+ },
6313+ "node_modules/safe-array-concat": {
6314+ "version": "1.1.4",
6315+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz",
6316+ "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==",
6317+ "dev": true,
6318+ "license": "MIT",
6319+ "dependencies": {
6320+ "call-bind": "^1.0.9",
6321+ "call-bound": "^1.0.4",
6322+ "get-intrinsic": "^1.3.0",
6323+ "has-symbols": "^1.1.0",
6324+ "isarray": "^2.0.5"
6325+ },
6326+ "engines": {
6327+ "node": ">=0.4"
6328+ },
6329+ "funding": {
6330+ "url": "https://github.com/sponsors/ljharb"
6331+ }
6332+ },
6333+ "node_modules/safe-push-apply": {
6334+ "version": "1.0.0",
6335+ "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
6336+ "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
6337+ "dev": true,
6338+ "license": "MIT",
6339+ "dependencies": {
6340+ "es-errors": "^1.3.0",
6341+ "isarray": "^2.0.5"
6342+ },
6343+ "engines": {
6344+ "node": ">= 0.4"
6345+ },
6346+ "funding": {
6347+ "url": "https://github.com/sponsors/ljharb"
6348+ }
6349+ },
6350+ "node_modules/safe-regex-test": {
6351+ "version": "1.1.0",
6352+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
6353+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
6354+ "dev": true,
6355+ "license": "MIT",
6356+ "dependencies": {
6357+ "call-bound": "^1.0.2",
6358+ "es-errors": "^1.3.0",
6359+ "is-regex": "^1.2.1"
6360+ },
6361+ "engines": {
6362+ "node": ">= 0.4"
6363+ },
6364+ "funding": {
6365+ "url": "https://github.com/sponsors/ljharb"
6366+ }
6367+ },
6368+ "node_modules/scheduler": {
6369+ "version": "0.27.0",
6370+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
6371+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
6372+ "license": "MIT"
6373+ },
6374+ "node_modules/semver": {
6375+ "version": "6.3.1",
6376+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
6377+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
6378+ "dev": true,
6379+ "license": "ISC",
6380+ "bin": {
6381+ "semver": "bin/semver.js"
6382+ }
6383+ },
6384+ "node_modules/set-function-length": {
6385+ "version": "1.2.2",
6386+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
6387+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
6388+ "dev": true,
6389+ "license": "MIT",
6390+ "dependencies": {
6391+ "define-data-property": "^1.1.4",
6392+ "es-errors": "^1.3.0",
6393+ "function-bind": "^1.1.2",
6394+ "get-intrinsic": "^1.2.4",
6395+ "gopd": "^1.0.1",
6396+ "has-property-descriptors": "^1.0.2"
6397+ },
6398+ "engines": {
6399+ "node": ">= 0.4"
6400+ }
6401+ },
6402+ "node_modules/set-function-name": {
6403+ "version": "2.0.2",
6404+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
6405+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
6406+ "dev": true,
6407+ "license": "MIT",
6408+ "dependencies": {
6409+ "define-data-property": "^1.1.4",
6410+ "es-errors": "^1.3.0",
6411+ "functions-have-names": "^1.2.3",
6412+ "has-property-descriptors": "^1.0.2"
6413+ },
6414+ "engines": {
6415+ "node": ">= 0.4"
6416+ }
6417+ },
6418+ "node_modules/set-proto": {
6419+ "version": "1.0.0",
6420+ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
6421+ "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
6422+ "dev": true,
6423+ "license": "MIT",
6424+ "dependencies": {
6425+ "dunder-proto": "^1.0.1",
6426+ "es-errors": "^1.3.0",
6427+ "es-object-atoms": "^1.0.0"
6428+ },
6429+ "engines": {
6430+ "node": ">= 0.4"
6431+ }
6432+ },
6433+ "node_modules/sharp": {
6434+ "version": "0.34.5",
6435+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
6436+ "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
6437+ "hasInstallScript": true,
6438+ "license": "Apache-2.0",
6439+ "optional": true,
6440+ "dependencies": {
6441+ "@img/colour": "^1.0.0",
6442+ "detect-libc": "^2.1.2",
6443+ "semver": "^7.7.3"
6444+ },
6445+ "engines": {
6446+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
6447+ },
6448+ "funding": {
6449+ "url": "https://opencollective.com/libvips"
6450+ },
6451+ "optionalDependencies": {
6452+ "@img/sharp-darwin-arm64": "0.34.5",
6453+ "@img/sharp-darwin-x64": "0.34.5",
6454+ "@img/sharp-libvips-darwin-arm64": "1.2.4",
6455+ "@img/sharp-libvips-darwin-x64": "1.2.4",
6456+ "@img/sharp-libvips-linux-arm": "1.2.4",
6457+ "@img/sharp-libvips-linux-arm64": "1.2.4",
6458+ "@img/sharp-libvips-linux-ppc64": "1.2.4",
6459+ "@img/sharp-libvips-linux-riscv64": "1.2.4",
6460+ "@img/sharp-libvips-linux-s390x": "1.2.4",
6461+ "@img/sharp-libvips-linux-x64": "1.2.4",
6462+ "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
6463+ "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
6464+ "@img/sharp-linux-arm": "0.34.5",
6465+ "@img/sharp-linux-arm64": "0.34.5",
6466+ "@img/sharp-linux-ppc64": "0.34.5",
6467+ "@img/sharp-linux-riscv64": "0.34.5",
6468+ "@img/sharp-linux-s390x": "0.34.5",
6469+ "@img/sharp-linux-x64": "0.34.5",
6470+ "@img/sharp-linuxmusl-arm64": "0.34.5",
6471+ "@img/sharp-linuxmusl-x64": "0.34.5",
6472+ "@img/sharp-wasm32": "0.34.5",
6473+ "@img/sharp-win32-arm64": "0.34.5",
6474+ "@img/sharp-win32-ia32": "0.34.5",
6475+ "@img/sharp-win32-x64": "0.34.5"
6476+ }
6477+ },
6478+ "node_modules/sharp/node_modules/semver": {
6479+ "version": "7.8.5",
6480+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
6481+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
6482+ "license": "ISC",
6483+ "optional": true,
6484+ "bin": {
6485+ "semver": "bin/semver.js"
6486+ },
6487+ "engines": {
6488+ "node": ">=10"
6489+ }
6490+ },
6491+ "node_modules/shebang-command": {
6492+ "version": "2.0.0",
6493+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
6494+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
6495+ "dev": true,
6496+ "license": "MIT",
6497+ "dependencies": {
6498+ "shebang-regex": "^3.0.0"
6499+ },
6500+ "engines": {
6501+ "node": ">=8"
6502+ }
6503+ },
6504+ "node_modules/shebang-regex": {
6505+ "version": "3.0.0",
6506+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
6507+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
6508+ "dev": true,
6509+ "license": "MIT",
6510+ "engines": {
6511+ "node": ">=8"
6512+ }
6513+ },
6514+ "node_modules/side-channel": {
6515+ "version": "1.1.1",
6516+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
6517+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
6518+ "dev": true,
6519+ "license": "MIT",
6520+ "dependencies": {
6521+ "es-errors": "^1.3.0",
6522+ "object-inspect": "^1.13.4",
6523+ "side-channel-list": "^1.0.1",
6524+ "side-channel-map": "^1.0.1",
6525+ "side-channel-weakmap": "^1.0.2"
6526+ },
6527+ "engines": {
6528+ "node": ">= 0.4"
6529+ },
6530+ "funding": {
6531+ "url": "https://github.com/sponsors/ljharb"
6532+ }
6533+ },
6534+ "node_modules/side-channel-list": {
6535+ "version": "1.0.1",
6536+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
6537+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
6538+ "dev": true,
6539+ "license": "MIT",
6540+ "dependencies": {
6541+ "es-errors": "^1.3.0",
6542+ "object-inspect": "^1.13.4"
6543+ },
6544+ "engines": {
6545+ "node": ">= 0.4"
6546+ },
6547+ "funding": {
6548+ "url": "https://github.com/sponsors/ljharb"
6549+ }
6550+ },
6551+ "node_modules/side-channel-map": {
6552+ "version": "1.0.1",
6553+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
6554+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
6555+ "dev": true,
6556+ "license": "MIT",
6557+ "dependencies": {
6558+ "call-bound": "^1.0.2",
6559+ "es-errors": "^1.3.0",
6560+ "get-intrinsic": "^1.2.5",
6561+ "object-inspect": "^1.13.3"
6562+ },
6563+ "engines": {
6564+ "node": ">= 0.4"
6565+ },
6566+ "funding": {
6567+ "url": "https://github.com/sponsors/ljharb"
6568+ }
6569+ },
6570+ "node_modules/side-channel-weakmap": {
6571+ "version": "1.0.2",
6572+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
6573+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
6574+ "dev": true,
6575+ "license": "MIT",
6576+ "dependencies": {
6577+ "call-bound": "^1.0.2",
6578+ "es-errors": "^1.3.0",
6579+ "get-intrinsic": "^1.2.5",
6580+ "object-inspect": "^1.13.3",
6581+ "side-channel-map": "^1.0.1"
6582+ },
6583+ "engines": {
6584+ "node": ">= 0.4"
6585+ },
6586+ "funding": {
6587+ "url": "https://github.com/sponsors/ljharb"
6588+ }
6589+ },
6590+ "node_modules/source-map-js": {
6591+ "version": "1.2.1",
6592+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
6593+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
6594+ "license": "BSD-3-Clause",
6595+ "engines": {
6596+ "node": ">=0.10.0"
6597+ }
6598+ },
6599+ "node_modules/stable-hash": {
6600+ "version": "0.0.5",
6601+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
6602+ "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
6603+ "dev": true,
6604+ "license": "MIT"
6605+ },
6606+ "node_modules/stop-iteration-iterator": {
6607+ "version": "1.1.0",
6608+ "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
6609+ "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
6610+ "dev": true,
6611+ "license": "MIT",
6612+ "dependencies": {
6613+ "es-errors": "^1.3.0",
6614+ "internal-slot": "^1.1.0"
6615+ },
6616+ "engines": {
6617+ "node": ">= 0.4"
6618+ }
6619+ },
6620+ "node_modules/string.prototype.includes": {
6621+ "version": "2.0.1",
6622+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
6623+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
6624+ "dev": true,
6625+ "license": "MIT",
6626+ "dependencies": {
6627+ "call-bind": "^1.0.7",
6628+ "define-properties": "^1.2.1",
6629+ "es-abstract": "^1.23.3"
6630+ },
6631+ "engines": {
6632+ "node": ">= 0.4"
6633+ }
6634+ },
6635+ "node_modules/string.prototype.matchall": {
6636+ "version": "4.0.12",
6637+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
6638+ "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
6639+ "dev": true,
6640+ "license": "MIT",
6641+ "dependencies": {
6642+ "call-bind": "^1.0.8",
6643+ "call-bound": "^1.0.3",
6644+ "define-properties": "^1.2.1",
6645+ "es-abstract": "^1.23.6",
6646+ "es-errors": "^1.3.0",
6647+ "es-object-atoms": "^1.0.0",
6648+ "get-intrinsic": "^1.2.6",
6649+ "gopd": "^1.2.0",
6650+ "has-symbols": "^1.1.0",
6651+ "internal-slot": "^1.1.0",
6652+ "regexp.prototype.flags": "^1.5.3",
6653+ "set-function-name": "^2.0.2",
6654+ "side-channel": "^1.1.0"
6655+ },
6656+ "engines": {
6657+ "node": ">= 0.4"
6658+ },
6659+ "funding": {
6660+ "url": "https://github.com/sponsors/ljharb"
6661+ }
6662+ },
6663+ "node_modules/string.prototype.repeat": {
6664+ "version": "1.0.0",
6665+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
6666+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
6667+ "dev": true,
6668+ "license": "MIT",
6669+ "dependencies": {
6670+ "define-properties": "^1.1.3",
6671+ "es-abstract": "^1.17.5"
6672+ }
6673+ },
6674+ "node_modules/string.prototype.trim": {
6675+ "version": "1.2.11",
6676+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.11.tgz",
6677+ "integrity": "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==",
6678+ "dev": true,
6679+ "license": "MIT",
6680+ "dependencies": {
6681+ "call-bind": "^1.0.9",
6682+ "call-bound": "^1.0.4",
6683+ "define-data-property": "^1.1.4",
6684+ "define-properties": "^1.2.1",
6685+ "es-abstract": "^1.24.2",
6686+ "es-object-atoms": "^1.1.2",
6687+ "has-property-descriptors": "^1.0.2",
6688+ "safe-regex-test": "^1.1.0"
6689+ },
6690+ "engines": {
6691+ "node": ">= 0.4"
6692+ },
6693+ "funding": {
6694+ "url": "https://github.com/sponsors/ljharb"
6695+ }
6696+ },
6697+ "node_modules/string.prototype.trimend": {
6698+ "version": "1.0.10",
6699+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.10.tgz",
6700+ "integrity": "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==",
6701+ "dev": true,
6702+ "license": "MIT",
6703+ "dependencies": {
6704+ "call-bind": "^1.0.9",
6705+ "call-bound": "^1.0.4",
6706+ "define-properties": "^1.2.1",
6707+ "es-object-atoms": "^1.1.2"
6708+ },
6709+ "engines": {
6710+ "node": ">= 0.4"
6711+ },
6712+ "funding": {
6713+ "url": "https://github.com/sponsors/ljharb"
6714+ }
6715+ },
6716+ "node_modules/string.prototype.trimstart": {
6717+ "version": "1.0.8",
6718+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
6719+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
6720+ "dev": true,
6721+ "license": "MIT",
6722+ "dependencies": {
6723+ "call-bind": "^1.0.7",
6724+ "define-properties": "^1.2.1",
6725+ "es-object-atoms": "^1.0.0"
6726+ },
6727+ "engines": {
6728+ "node": ">= 0.4"
6729+ },
6730+ "funding": {
6731+ "url": "https://github.com/sponsors/ljharb"
6732+ }
6733+ },
6734+ "node_modules/strip-bom": {
6735+ "version": "3.0.0",
6736+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
6737+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
6738+ "dev": true,
6739+ "license": "MIT",
6740+ "engines": {
6741+ "node": ">=4"
6742+ }
6743+ },
6744+ "node_modules/strip-json-comments": {
6745+ "version": "3.1.1",
6746+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
6747+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
6748+ "dev": true,
6749+ "license": "MIT",
6750+ "engines": {
6751+ "node": ">=8"
6752+ },
6753+ "funding": {
6754+ "url": "https://github.com/sponsors/sindresorhus"
6755+ }
6756+ },
6757+ "node_modules/styled-jsx": {
6758+ "version": "5.1.6",
6759+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
6760+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
6761+ "license": "MIT",
6762+ "dependencies": {
6763+ "client-only": "0.0.1"
6764+ },
6765+ "engines": {
6766+ "node": ">= 12.0.0"
6767+ },
6768+ "peerDependencies": {
6769+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
6770+ },
6771+ "peerDependenciesMeta": {
6772+ "@babel/core": {
6773+ "optional": true
6774+ },
6775+ "babel-plugin-macros": {
6776+ "optional": true
6777+ }
6778+ }
6779+ },
6780+ "node_modules/supports-color": {
6781+ "version": "7.2.0",
6782+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
6783+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
6784+ "dev": true,
6785+ "license": "MIT",
6786+ "dependencies": {
6787+ "has-flag": "^4.0.0"
6788+ },
6789+ "engines": {
6790+ "node": ">=8"
6791+ }
6792+ },
6793+ "node_modules/supports-preserve-symlinks-flag": {
6794+ "version": "1.0.0",
6795+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
6796+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
6797+ "dev": true,
6798+ "license": "MIT",
6799+ "engines": {
6800+ "node": ">= 0.4"
6801+ },
6802+ "funding": {
6803+ "url": "https://github.com/sponsors/ljharb"
6804+ }
6805+ },
6806+ "node_modules/tailwindcss": {
6807+ "version": "4.3.3",
6808+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz",
6809+ "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==",
6810+ "dev": true,
6811+ "license": "MIT"
6812+ },
6813+ "node_modules/tapable": {
6814+ "version": "2.3.3",
6815+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz",
6816+ "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==",
6817+ "dev": true,
6818+ "license": "MIT",
6819+ "engines": {
6820+ "node": ">=6"
6821+ },
6822+ "funding": {
6823+ "type": "opencollective",
6824+ "url": "https://opencollective.com/webpack"
6825+ }
6826+ },
6827+ "node_modules/tinyglobby": {
6828+ "version": "0.2.17",
6829+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz",
6830+ "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
6831+ "dev": true,
6832+ "license": "MIT",
6833+ "dependencies": {
6834+ "fdir": "^6.5.0",
6835+ "picomatch": "^4.0.4"
6836+ },
6837+ "engines": {
6838+ "node": ">=12.0.0"
6839+ },
6840+ "funding": {
6841+ "url": "https://github.com/sponsors/SuperchupuDev"
6842+ }
6843+ },
6844+ "node_modules/tinyglobby/node_modules/fdir": {
6845+ "version": "6.5.0",
6846+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
6847+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
6848+ "dev": true,
6849+ "license": "MIT",
6850+ "engines": {
6851+ "node": ">=12.0.0"
6852+ },
6853+ "peerDependencies": {
6854+ "picomatch": "^3 || ^4"
6855+ },
6856+ "peerDependenciesMeta": {
6857+ "picomatch": {
6858+ "optional": true
6859+ }
6860+ }
6861+ },
6862+ "node_modules/tinyglobby/node_modules/picomatch": {
6863+ "version": "4.0.5",
6864+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
6865+ "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
6866+ "dev": true,
6867+ "license": "MIT",
6868+ "engines": {
6869+ "node": ">=12"
6870+ },
6871+ "funding": {
6872+ "url": "https://github.com/sponsors/jonschlinkert"
6873+ }
6874+ },
6875+ "node_modules/to-regex-range": {
6876+ "version": "5.0.1",
6877+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
6878+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
6879+ "dev": true,
6880+ "license": "MIT",
6881+ "dependencies": {
6882+ "is-number": "^7.0.0"
6883+ },
6884+ "engines": {
6885+ "node": ">=8.0"
6886+ }
6887+ },
6888+ "node_modules/ts-api-utils": {
6889+ "version": "2.5.0",
6890+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
6891+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
6892+ "dev": true,
6893+ "license": "MIT",
6894+ "engines": {
6895+ "node": ">=18.12"
6896+ },
6897+ "peerDependencies": {
6898+ "typescript": ">=4.8.4"
6899+ }
6900+ },
6901+ "node_modules/tsconfig-paths": {
6902+ "version": "3.15.0",
6903+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
6904+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
6905+ "dev": true,
6906+ "license": "MIT",
6907+ "dependencies": {
6908+ "@types/json5": "^0.0.29",
6909+ "json5": "^1.0.2",
6910+ "minimist": "^1.2.6",
6911+ "strip-bom": "^3.0.0"
6912+ }
6913+ },
6914+ "node_modules/tsconfig-paths/node_modules/json5": {
6915+ "version": "1.0.2",
6916+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
6917+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
6918+ "dev": true,
6919+ "license": "MIT",
6920+ "dependencies": {
6921+ "minimist": "^1.2.0"
6922+ },
6923+ "bin": {
6924+ "json5": "lib/cli.js"
6925+ }
6926+ },
6927+ "node_modules/tslib": {
6928+ "version": "2.8.1",
6929+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
6930+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
6931+ "license": "0BSD"
6932+ },
6933+ "node_modules/tsx": {
6934+ "version": "4.23.5",
6935+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.5.tgz",
6936+ "integrity": "sha512-rw55FUaqOoI7RvlQwLbhO4nSDApnQ4/CykPuiQ/EPvtrX3WA9Ig55jIt9VvbBJbzJuj12ueRu4PMZ2SxPVbihg==",
6937+ "dev": true,
6938+ "license": "MIT",
6939+ "dependencies": {
6940+ "esbuild": "~0.28.0"
6941+ },
6942+ "bin": {
6943+ "tsx": "dist/cli.mjs"
6944+ },
6945+ "engines": {
6946+ "node": ">=18.0.0"
6947+ },
6948+ "optionalDependencies": {
6949+ "fsevents": "~2.3.3"
6950+ }
6951+ },
6952+ "node_modules/type-check": {
6953+ "version": "0.4.0",
6954+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
6955+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
6956+ "dev": true,
6957+ "license": "MIT",
6958+ "dependencies": {
6959+ "prelude-ls": "^1.2.1"
6960+ },
6961+ "engines": {
6962+ "node": ">= 0.8.0"
6963+ }
6964+ },
6965+ "node_modules/typed-array-buffer": {
6966+ "version": "1.0.3",
6967+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
6968+ "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
6969+ "dev": true,
6970+ "license": "MIT",
6971+ "dependencies": {
6972+ "call-bound": "^1.0.3",
6973+ "es-errors": "^1.3.0",
6974+ "is-typed-array": "^1.1.14"
6975+ },
6976+ "engines": {
6977+ "node": ">= 0.4"
6978+ }
6979+ },
6980+ "node_modules/typed-array-byte-length": {
6981+ "version": "1.0.3",
6982+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
6983+ "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
6984+ "dev": true,
6985+ "license": "MIT",
6986+ "dependencies": {
6987+ "call-bind": "^1.0.8",
6988+ "for-each": "^0.3.3",
6989+ "gopd": "^1.2.0",
6990+ "has-proto": "^1.2.0",
6991+ "is-typed-array": "^1.1.14"
6992+ },
6993+ "engines": {
6994+ "node": ">= 0.4"
6995+ },
6996+ "funding": {
6997+ "url": "https://github.com/sponsors/ljharb"
6998+ }
6999+ },
7000+ "node_modules/typed-array-byte-offset": {
7001+ "version": "1.0.4",
7002+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
7003+ "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
7004+ "dev": true,
7005+ "license": "MIT",
7006+ "dependencies": {
7007+ "available-typed-arrays": "^1.0.7",
7008+ "call-bind": "^1.0.8",
7009+ "for-each": "^0.3.3",
7010+ "gopd": "^1.2.0",
7011+ "has-proto": "^1.2.0",
7012+ "is-typed-array": "^1.1.15",
7013+ "reflect.getprototypeof": "^1.0.9"
7014+ },
7015+ "engines": {
7016+ "node": ">= 0.4"
7017+ },
7018+ "funding": {
7019+ "url": "https://github.com/sponsors/ljharb"
7020+ }
7021+ },
7022+ "node_modules/typed-array-length": {
7023+ "version": "1.0.8",
7024+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.8.tgz",
7025+ "integrity": "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==",
7026+ "dev": true,
7027+ "license": "MIT",
7028+ "dependencies": {
7029+ "call-bind": "^1.0.9",
7030+ "for-each": "^0.3.5",
7031+ "gopd": "^1.2.0",
7032+ "is-typed-array": "^1.1.15",
7033+ "possible-typed-array-names": "^1.1.0",
7034+ "reflect.getprototypeof": "^1.0.10"
7035+ },
7036+ "engines": {
7037+ "node": ">= 0.4"
7038+ },
7039+ "funding": {
7040+ "url": "https://github.com/sponsors/ljharb"
7041+ }
7042+ },
7043+ "node_modules/typescript": {
7044+ "version": "5.9.3",
7045+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
7046+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
7047+ "dev": true,
7048+ "license": "Apache-2.0",
7049+ "bin": {
7050+ "tsc": "bin/tsc",
7051+ "tsserver": "bin/tsserver"
7052+ },
7053+ "engines": {
7054+ "node": ">=14.17"
7055+ }
7056+ },
7057+ "node_modules/typescript-eslint": {
7058+ "version": "8.65.0",
7059+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz",
7060+ "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==",
7061+ "dev": true,
7062+ "license": "MIT",
7063+ "dependencies": {
7064+ "@typescript-eslint/eslint-plugin": "8.65.0",
7065+ "@typescript-eslint/parser": "8.65.0",
7066+ "@typescript-eslint/typescript-estree": "8.65.0",
7067+ "@typescript-eslint/utils": "8.65.0"
7068+ },
7069+ "engines": {
7070+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
7071+ },
7072+ "funding": {
7073+ "type": "opencollective",
7074+ "url": "https://opencollective.com/typescript-eslint"
7075+ },
7076+ "peerDependencies": {
7077+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
7078+ "typescript": ">=4.8.4 <6.1.0"
7079+ }
7080+ },
7081+ "node_modules/unbox-primitive": {
7082+ "version": "1.1.0",
7083+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
7084+ "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
7085+ "dev": true,
7086+ "license": "MIT",
7087+ "dependencies": {
7088+ "call-bound": "^1.0.3",
7089+ "has-bigints": "^1.0.2",
7090+ "has-symbols": "^1.1.0",
7091+ "which-boxed-primitive": "^1.1.1"
7092+ },
7093+ "engines": {
7094+ "node": ">= 0.4"
7095+ },
7096+ "funding": {
7097+ "url": "https://github.com/sponsors/ljharb"
7098+ }
7099+ },
7100+ "node_modules/undici-types": {
7101+ "version": "6.21.0",
7102+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
7103+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
7104+ "dev": true,
7105+ "license": "MIT"
7106+ },
7107+ "node_modules/unrs-resolver": {
7108+ "version": "1.12.2",
7109+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz",
7110+ "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==",
7111+ "dev": true,
7112+ "hasInstallScript": true,
7113+ "license": "MIT",
7114+ "dependencies": {
7115+ "napi-postinstall": "^0.3.4"
7116+ },
7117+ "funding": {
7118+ "url": "https://opencollective.com/unrs-resolver"
7119+ },
7120+ "optionalDependencies": {
7121+ "@unrs/resolver-binding-android-arm-eabi": "1.12.2",
7122+ "@unrs/resolver-binding-android-arm64": "1.12.2",
7123+ "@unrs/resolver-binding-darwin-arm64": "1.12.2",
7124+ "@unrs/resolver-binding-darwin-x64": "1.12.2",
7125+ "@unrs/resolver-binding-freebsd-x64": "1.12.2",
7126+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2",
7127+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2",
7128+ "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2",
7129+ "@unrs/resolver-binding-linux-arm64-musl": "1.12.2",
7130+ "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2",
7131+ "@unrs/resolver-binding-linux-loong64-musl": "1.12.2",
7132+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2",
7133+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2",
7134+ "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2",
7135+ "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2",
7136+ "@unrs/resolver-binding-linux-x64-gnu": "1.12.2",
7137+ "@unrs/resolver-binding-linux-x64-musl": "1.12.2",
7138+ "@unrs/resolver-binding-openharmony-arm64": "1.12.2",
7139+ "@unrs/resolver-binding-wasm32-wasi": "1.12.2",
7140+ "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2",
7141+ "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2",
7142+ "@unrs/resolver-binding-win32-x64-msvc": "1.12.2"
7143+ }
7144+ },
7145+ "node_modules/update-browserslist-db": {
7146+ "version": "1.2.3",
7147+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
7148+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
7149+ "dev": true,
7150+ "funding": [
7151+ {
7152+ "type": "opencollective",
7153+ "url": "https://opencollective.com/browserslist"
7154+ },
7155+ {
7156+ "type": "tidelift",
7157+ "url": "https://tidelift.com/funding/github/npm/browserslist"
7158+ },
7159+ {
7160+ "type": "github",
7161+ "url": "https://github.com/sponsors/ai"
7162+ }
7163+ ],
7164+ "license": "MIT",
7165+ "dependencies": {
7166+ "escalade": "^3.2.0",
7167+ "picocolors": "^1.1.1"
7168+ },
7169+ "bin": {
7170+ "update-browserslist-db": "cli.js"
7171+ },
7172+ "peerDependencies": {
7173+ "browserslist": ">= 4.21.0"
7174+ }
7175+ },
7176+ "node_modules/uri-js": {
7177+ "version": "4.4.1",
7178+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
7179+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
7180+ "dev": true,
7181+ "license": "BSD-2-Clause",
7182+ "dependencies": {
7183+ "punycode": "^2.1.0"
7184+ }
7185+ },
7186+ "node_modules/which": {
7187+ "version": "2.0.2",
7188+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
7189+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
7190+ "dev": true,
7191+ "license": "ISC",
7192+ "dependencies": {
7193+ "isexe": "^2.0.0"
7194+ },
7195+ "bin": {
7196+ "node-which": "bin/node-which"
7197+ },
7198+ "engines": {
7199+ "node": ">= 8"
7200+ }
7201+ },
7202+ "node_modules/which-boxed-primitive": {
7203+ "version": "1.1.1",
7204+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
7205+ "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
7206+ "dev": true,
7207+ "license": "MIT",
7208+ "dependencies": {
7209+ "is-bigint": "^1.1.0",
7210+ "is-boolean-object": "^1.2.1",
7211+ "is-number-object": "^1.1.1",
7212+ "is-string": "^1.1.1",
7213+ "is-symbol": "^1.1.1"
7214+ },
7215+ "engines": {
7216+ "node": ">= 0.4"
7217+ },
7218+ "funding": {
7219+ "url": "https://github.com/sponsors/ljharb"
7220+ }
7221+ },
7222+ "node_modules/which-builtin-type": {
7223+ "version": "1.2.1",
7224+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
7225+ "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
7226+ "dev": true,
7227+ "license": "MIT",
7228+ "dependencies": {
7229+ "call-bound": "^1.0.2",
7230+ "function.prototype.name": "^1.1.6",
7231+ "has-tostringtag": "^1.0.2",
7232+ "is-async-function": "^2.0.0",
7233+ "is-date-object": "^1.1.0",
7234+ "is-finalizationregistry": "^1.1.0",
7235+ "is-generator-function": "^1.0.10",
7236+ "is-regex": "^1.2.1",
7237+ "is-weakref": "^1.0.2",
7238+ "isarray": "^2.0.5",
7239+ "which-boxed-primitive": "^1.1.0",
7240+ "which-collection": "^1.0.2",
7241+ "which-typed-array": "^1.1.16"
7242+ },
7243+ "engines": {
7244+ "node": ">= 0.4"
7245+ },
7246+ "funding": {
7247+ "url": "https://github.com/sponsors/ljharb"
7248+ }
7249+ },
7250+ "node_modules/which-collection": {
7251+ "version": "1.0.2",
7252+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
7253+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
7254+ "dev": true,
7255+ "license": "MIT",
7256+ "dependencies": {
7257+ "is-map": "^2.0.3",
7258+ "is-set": "^2.0.3",
7259+ "is-weakmap": "^2.0.2",
7260+ "is-weakset": "^2.0.3"
7261+ },
7262+ "engines": {
7263+ "node": ">= 0.4"
7264+ },
7265+ "funding": {
7266+ "url": "https://github.com/sponsors/ljharb"
7267+ }
7268+ },
7269+ "node_modules/which-typed-array": {
7270+ "version": "1.1.22",
7271+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz",
7272+ "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==",
7273+ "dev": true,
7274+ "license": "MIT",
7275+ "dependencies": {
7276+ "available-typed-arrays": "^1.0.7",
7277+ "call-bind": "^1.0.9",
7278+ "call-bound": "^1.0.4",
7279+ "for-each": "^0.3.5",
7280+ "get-proto": "^1.0.1",
7281+ "gopd": "^1.2.0",
7282+ "has-tostringtag": "^1.0.2"
7283+ },
7284+ "engines": {
7285+ "node": ">= 0.4"
7286+ },
7287+ "funding": {
7288+ "url": "https://github.com/sponsors/ljharb"
7289+ }
7290+ },
7291+ "node_modules/word-wrap": {
7292+ "version": "1.2.5",
7293+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
7294+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
7295+ "dev": true,
7296+ "license": "MIT",
7297+ "engines": {
7298+ "node": ">=0.10.0"
7299+ }
7300+ },
7301+ "node_modules/yallist": {
7302+ "version": "3.1.1",
7303+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
7304+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
7305+ "dev": true,
7306+ "license": "ISC"
7307+ },
7308+ "node_modules/yocto-queue": {
7309+ "version": "0.1.0",
7310+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
7311+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
7312+ "dev": true,
7313+ "license": "MIT",
7314+ "engines": {
7315+ "node": ">=10"
7316+ },
7317+ "funding": {
7318+ "url": "https://github.com/sponsors/sindresorhus"
7319+ }
7320+ },
7321+ "node_modules/zod": {
7322+ "version": "4.4.3",
7323+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz",
7324+ "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
7325+ "dev": true,
7326+ "license": "MIT",
7327+ "funding": {
7328+ "url": "https://github.com/sponsors/colinhacks"
7329+ }
7330+ },
7331+ "node_modules/zod-validation-error": {
7332+ "version": "4.0.2",
7333+ "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz",
7334+ "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==",
7335+ "dev": true,
7336+ "license": "MIT",
7337+ "engines": {
7338+ "node": ">=18.0.0"
7339+ },
7340+ "peerDependencies": {
7341+ "zod": "^3.25.0 || ^4.0.0"
7342+ }
7343+ }
7344+ }
7345+}
added package.json +33 -0
new file mode 100644
@@ -0,0 +1,33 @@
1+{
2+ "name": "blade-team-architect",
3+ "version": "1.0.0",
4+ "private": true,
5+ "license": "MIT",
6+ "type": "module",
7+ "engines": {
8+ "node": ">=20.9.0"
9+ },
10+ "scripts": {
11+ "dev": "next dev",
12+ "build": "next build",
13+ "lint": "eslint .",
14+ "test": "tsx --test src/lib/engine.test.ts",
15+ "typecheck": "tsc --noEmit"
16+ },
17+ "dependencies": {
18+ "next": "^16.2.12",
19+ "react": "^19.2.8",
20+ "react-dom": "^19.2.8"
21+ },
22+ "devDependencies": {
23+ "@tailwindcss/postcss": "^4.3.3",
24+ "@types/node": "^22.19.19",
25+ "@types/react": "^19.2.14",
26+ "@types/react-dom": "^19.2.3",
27+ "eslint": "^9.39.4",
28+ "eslint-config-next": "^16.2.12",
29+ "tailwindcss": "^4.3.3",
30+ "tsx": "^4.23.5",
31+ "typescript": "^5.9.3"
32+ }
33+}
new file mode 100644
@@ -0,0 +1,33 @@
1+{
2+ "name": "blade-team-architect",
3+ "version": "1.0.0",
4+ "private": true,
5+ "license": "MIT",
6+ "type": "module",
7+ "engines": {
8+ "node": ">=20.9.0"
9+ },
10+ "scripts": {
11+ "dev": "next dev",
12+ "build": "next build",
13+ "lint": "eslint .",
14+ "test": "tsx --test src/lib/engine.test.ts",
15+ "typecheck": "tsc --noEmit"
16+ },
17+ "dependencies": {
18+ "next": "^16.2.12",
19+ "react": "^19.2.8",
20+ "react-dom": "^19.2.8"
21+ },
22+ "devDependencies": {
23+ "@tailwindcss/postcss": "^4.3.3",
24+ "@types/node": "^22.19.19",
25+ "@types/react": "^19.2.14",
26+ "@types/react-dom": "^19.2.3",
27+ "eslint": "^9.39.4",
28+ "eslint-config-next": "^16.2.12",
29+ "tailwindcss": "^4.3.3",
30+ "tsx": "^4.23.5",
31+ "typescript": "^5.9.3"
32+ }
33+}
added postcss.config.mjs +7 -0
new file mode 100644
@@ -0,0 +1,7 @@
1+const config = {
2+ plugins: {
3+ "@tailwindcss/postcss": {},
4+ },
5+};
6+
7+export default config;
new file mode 100644
@@ -0,0 +1,7 @@
1+const config = {
2+ plugins: {
3+ "@tailwindcss/postcss": {},
4+ },
5+};
6+
7+export default config;
added public/favicon.svg +6 -0
new file mode 100644
@@ -0,0 +1,6 @@
1+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2+<path d="M22 19.2727C22 20.779 20.779 22 19.2727 22H14.7273C13.221 22 12 20.779 12 19.2727V12H19.2727C20.779 12 22 13.221 22 14.7273V19.2727Z" fill="#68C4FF"/>
3+<path d="M20 2C21.1046 2 22 2.89543 22 4V7C22 8.10457 21.1046 9 20 9H17C15.8954 9 15 8.10457 15 7V4C15 2.89543 15.8954 2 17 2H20Z" fill="#0C79D8"/>
4+<path d="M7 15C8.10457 15 9 15.8954 9 17V20C9 21.1046 8.10457 22 7 22H4C2.89543 22 2 21.1046 2 20V17C2 15.8954 2.89543 15 4 15H7Z" fill="#0C79D8"/>
5+<path d="M12 12H4.72727C3.22104 12 2 10.779 2 9.27273V4.72727C2 3.22104 3.22104 2 4.72727 2H9.27273C10.779 2 12 3.22104 12 4.72727V12Z" fill="#2E9EFF"/>
6+</svg>
new file mode 100644
@@ -0,0 +1,6 @@
1+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2+<path d="M22 19.2727C22 20.779 20.779 22 19.2727 22H14.7273C13.221 22 12 20.779 12 19.2727V12H19.2727C20.779 12 22 13.221 22 14.7273V19.2727Z" fill="#68C4FF"/>
3+<path d="M20 2C21.1046 2 22 2.89543 22 4V7C22 8.10457 21.1046 9 20 9H17C15.8954 9 15 8.10457 15 7V4C15 2.89543 15.8954 2 17 2H20Z" fill="#0C79D8"/>
4+<path d="M7 15C8.10457 15 9 15.8954 9 17V20C9 21.1046 8.10457 22 7 22H4C2.89543 22 2 21.1046 2 20V17C2 15.8954 2.89543 15 4 15H7Z" fill="#0C79D8"/>
5+<path d="M12 12H4.72727C3.22104 12 2 10.779 2 9.27273V4.72727C2 3.22104 3.22104 2 4.72727 2H9.27273C10.779 2 12 3.22104 12 4.72727V12Z" fill="#2E9EFF"/>
6+</svg>
added public/file.svg +1 -0
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
\ No newline at end of file
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
\ No newline at end of file\ No newline at end of file
added public/globe.svg +1 -0
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
\ No newline at end of file
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
\ No newline at end of file\ No newline at end of file
added public/window.svg +1 -0
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
\ No newline at end of file
new file mode 100644
@@ -0,0 +1 @@
1+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
\ No newline at end of file\ No newline at end of file
added render.yaml +8 -0
new file mode 100644
@@ -0,0 +1,8 @@
1+# Render blueprint — free static site (no server, no cold start).
2+# https://render.com/docs/blueprint-spec
3+services:
4+ - type: web
5+ name: blade-team-architect
6+ runtime: static
7+ buildCommand: npm ci && npm run build
8+ staticPublishPath: out
new file mode 100644
@@ -0,0 +1,8 @@
1+# Render blueprint — free static site (no server, no cold start).
2+# https://render.com/docs/blueprint-spec
3+services:
4+ - type: web
5+ name: blade-team-architect
6+ runtime: static
7+ buildCommand: npm ci && npm run build
8+ staticPublishPath: out
added src/components/BuildCard.tsx +139 -0
new file mode 100644
@@ -0,0 +1,139 @@
1+import { armsManufacturers } from "@/src/data/arms";
2+import { buildStrategies } from "@/src/data/builds";
3+import type { Copy } from "@/src/data/i18n";
4+import {
5+ dual,
6+ recommendSkellAlternatives,
7+ recommendSkellFrame,
8+ recommendSkellLoadout,
9+} from "@/src/lib/engine";
10+import type { Lang, RosterMember } from "@/src/lib/types";
11+
12+interface BuildCardProps {
13+ index: number;
14+ member: RosterMember;
15+ lang: Lang;
16+ t: Copy;
17+ hasSkellLicense: boolean;
18+ postgameFrames: boolean;
19+}
20+
21+export default function BuildCard({
22+ index,
23+ member,
24+ lang,
25+ t,
26+ hasSkellLicense,
27+ postgameFrames,
28+}: BuildCardProps) {
29+ const strategy = buildStrategies[member.strategy];
30+ const armsManufacturer = armsManufacturers[member.strategy];
31+ const skell = recommendSkellFrame({
32+ strategy: member.strategy,
33+ pilotLevel: member.effectiveLevel,
34+ hasLicense: hasSkellLicense,
35+ postgameFrames,
36+ });
37+ const loadout = skell ? recommendSkellLoadout(member.strategy, skell.requiredLevel) : null;
38+ const alternatives = skell
39+ ? recommendSkellAlternatives({
40+ strategy: member.strategy,
41+ pilotLevel: member.effectiveLevel,
42+ hasLicense: hasSkellLicense,
43+ postgameFrames,
44+ })
45+ : [];
46+
47+ return (
48+ <article className="build-card">
49+ <header className="build-card-head">
50+ <span className="member-number">{String(index + 1).padStart(2, "0")}</span>
51+ <div><h3>{member.name}</h3><p>{member.className} · LV {member.effectiveLevel} · RANK {member.rank}</p></div>
52+ <div className="role-tag"><small>{strategy.damage}</small><b>{dual(strategy.role, lang)}</b></div>
53+ </header>
54+ <div className="build-columns">
55+ <section className="loadout-block arts-block">
56+ <h4><span>A</span>{t.artsLoadout} · {member.arts.length}/8</h4>
57+ <p className="weapon-lock">{member.weapons.ranged} + {member.weapons.melee} · {dual(member.note, lang)}</p>
58+ {member.arts.length > 0 ? <ol>
59+ {member.arts.slice(0, 8).map((art, artIndex) => (
60+ <li key={`${art.source.id}-${art.name}`}>
61+ <span>{String(artIndex + 1).padStart(2, "0")}</span>
62+ <b title={art.reason}>{art.name}</b>
63+ <small>{art.weapon ?? `${member.weapons.ranged} + ${member.weapons.melee}`}</small>
64+ <a className="lvl-badge" href={art.source.url} target="_blank" rel="noreferrer" title={art.source.citation}>
65+ {art.source.id} · RANK {art.unlockRank}
66+ </a>
67+ </li>
68+ ))}
69+ </ol> : <p className="empty-loadout">{t.noLearnedArts}</p>}
70+ </section>
71+
72+ <section className="loadout-block skills-block">
73+ <h4><span>S</span>{t.skills} · {member.skills.length}/{member.skillSlots}</h4>
74+ {member.skills.length > 0 ? <div className="chip-list">
75+ {member.skills.map((skill) => (
76+ <span key={`${skill.source.id}-${skill.name}`}>
77+ <b title={skill.reason}>{skill.name}</b>
78+ <a className="lvl-badge" href={skill.source.url} target="_blank" rel="noreferrer" title={skill.source.citation}>
79+ {skill.source.id} · RANK {skill.unlockRank}
80+ </a>
81+ </span>
82+ ))}
83+ </div> : <p className="empty-loadout">{t.noLearnedSkills}</p>}
84+
85+ <h5>{t.heuristicStatPriority}</h5>
86+ <ol className="stat-priority-list">
87+ {strategy.statPriority.map((stat) => <li key={stat}>{stat}</li>)}
88+ </ol>
89+
90+ <h5>{t.amRecommended}</h5>
91+ <p className="am-note"><b>{armsManufacturer.name}</b><span>{dual(armsManufacturer.specialty, lang)}</span></p>
92+
93+ <h5>{t.planReasons}</h5>
94+ <ul className="plan-reasons">
95+ {member.planReasons.map((reason) => <li key={reason}>{reason}</li>)}
96+ </ul>
97+ </section>
98+
99+ <section className="loadout-block skell-block">
100+ <h4><span>K</span>{t.skellSection}</h4>
101+ {skell && loadout ? <>
102+ <div className="skell-frame">
103+ <small>FRAME</small>
104+ <strong>{skell.frame}</strong>
105+ <span>{dual(strategy.skellRole, lang)}</span>
106+ </div>
107+ <dl className="skell-facts">
108+ <div><dt>{t.requiredPilotLevel}</dt><dd>LV {skell.requiredLevel}</dd></div>
109+ <div><dt>{t.acquisition}</dt><dd>{skell.acquisition}</dd></div>
110+ <div><dt>{t.reason}</dt><dd>{skell.reason}</dd></div>
111+ </dl>
112+ {alternatives.length > 0 && <div className="skell-alts">
113+ <small>{t.skellAlternatives}</small>
114+ {alternatives.map((alt) => (
115+ <p key={alt.frame}><b>{alt.frame}</b><span>{alt.acquisition}</span></p>
116+ ))}
117+ </div>}
118+ <h5>{t.skellWeapons}</h5>
119+ <ul className="skell-gear-list">
120+ {loadout.weapons.map((weapon) => (
121+ <li key={weapon.name}>
122+ <b>{weapon.name}</b>
123+ <small>{weapon.slot} · {weapon.attribute} · {weapon.acquisition}</small>
124+ </li>
125+ ))}
126+ </ul>
127+ <h5>{t.skellAugments}</h5>
128+ <ul className="skell-gear-list">
129+ {loadout.augments.map((augment) => <li key={augment}><b>{augment}</b></li>)}
130+ </ul>
131+ </> : <div className="skell-unavailable">
132+ <strong>{t.unavailable}</strong>
133+ <p>{!hasSkellLicense ? t.skellNoLicense : t.skellLowLevel}</p>
134+ </div>}
135+ </section>
136+ </div>
137+ </article>
138+ );
139+}
new file mode 100644
@@ -0,0 +1,139 @@
1+import { armsManufacturers } from "@/src/data/arms";
2+import { buildStrategies } from "@/src/data/builds";
3+import type { Copy } from "@/src/data/i18n";
4+import {
5+ dual,
6+ recommendSkellAlternatives,
7+ recommendSkellFrame,
8+ recommendSkellLoadout,
9+} from "@/src/lib/engine";
10+import type { Lang, RosterMember } from "@/src/lib/types";
11+
12+interface BuildCardProps {
13+ index: number;
14+ member: RosterMember;
15+ lang: Lang;
16+ t: Copy;
17+ hasSkellLicense: boolean;
18+ postgameFrames: boolean;
19+}
20+
21+export default function BuildCard({
22+ index,
23+ member,
24+ lang,
25+ t,
26+ hasSkellLicense,
27+ postgameFrames,
28+}: BuildCardProps) {
29+ const strategy = buildStrategies[member.strategy];
30+ const armsManufacturer = armsManufacturers[member.strategy];
31+ const skell = recommendSkellFrame({
32+ strategy: member.strategy,
33+ pilotLevel: member.effectiveLevel,
34+ hasLicense: hasSkellLicense,
35+ postgameFrames,
36+ });
37+ const loadout = skell ? recommendSkellLoadout(member.strategy, skell.requiredLevel) : null;
38+ const alternatives = skell
39+ ? recommendSkellAlternatives({
40+ strategy: member.strategy,
41+ pilotLevel: member.effectiveLevel,
42+ hasLicense: hasSkellLicense,
43+ postgameFrames,
44+ })
45+ : [];
46+
47+ return (
48+ <article className="build-card">
49+ <header className="build-card-head">
50+ <span className="member-number">{String(index + 1).padStart(2, "0")}</span>
51+ <div><h3>{member.name}</h3><p>{member.className} · LV {member.effectiveLevel} · RANK {member.rank}</p></div>
52+ <div className="role-tag"><small>{strategy.damage}</small><b>{dual(strategy.role, lang)}</b></div>
53+ </header>
54+ <div className="build-columns">
55+ <section className="loadout-block arts-block">
56+ <h4><span>A</span>{t.artsLoadout} · {member.arts.length}/8</h4>
57+ <p className="weapon-lock">{member.weapons.ranged} + {member.weapons.melee} · {dual(member.note, lang)}</p>
58+ {member.arts.length > 0 ? <ol>
59+ {member.arts.slice(0, 8).map((art, artIndex) => (
60+ <li key={`${art.source.id}-${art.name}`}>
61+ <span>{String(artIndex + 1).padStart(2, "0")}</span>
62+ <b title={art.reason}>{art.name}</b>
63+ <small>{art.weapon ?? `${member.weapons.ranged} + ${member.weapons.melee}`}</small>
64+ <a className="lvl-badge" href={art.source.url} target="_blank" rel="noreferrer" title={art.source.citation}>
65+ {art.source.id} · RANK {art.unlockRank}
66+ </a>
67+ </li>
68+ ))}
69+ </ol> : <p className="empty-loadout">{t.noLearnedArts}</p>}
70+ </section>
71+
72+ <section className="loadout-block skills-block">
73+ <h4><span>S</span>{t.skills} · {member.skills.length}/{member.skillSlots}</h4>
74+ {member.skills.length > 0 ? <div className="chip-list">
75+ {member.skills.map((skill) => (
76+ <span key={`${skill.source.id}-${skill.name}`}>
77+ <b title={skill.reason}>{skill.name}</b>
78+ <a className="lvl-badge" href={skill.source.url} target="_blank" rel="noreferrer" title={skill.source.citation}>
79+ {skill.source.id} · RANK {skill.unlockRank}
80+ </a>
81+ </span>
82+ ))}
83+ </div> : <p className="empty-loadout">{t.noLearnedSkills}</p>}
84+
85+ <h5>{t.heuristicStatPriority}</h5>
86+ <ol className="stat-priority-list">
87+ {strategy.statPriority.map((stat) => <li key={stat}>{stat}</li>)}
88+ </ol>
89+
90+ <h5>{t.amRecommended}</h5>
91+ <p className="am-note"><b>{armsManufacturer.name}</b><span>{dual(armsManufacturer.specialty, lang)}</span></p>
92+
93+ <h5>{t.planReasons}</h5>
94+ <ul className="plan-reasons">
95+ {member.planReasons.map((reason) => <li key={reason}>{reason}</li>)}
96+ </ul>
97+ </section>
98+
99+ <section className="loadout-block skell-block">
100+ <h4><span>K</span>{t.skellSection}</h4>
101+ {skell && loadout ? <>
102+ <div className="skell-frame">
103+ <small>FRAME</small>
104+ <strong>{skell.frame}</strong>
105+ <span>{dual(strategy.skellRole, lang)}</span>
106+ </div>
107+ <dl className="skell-facts">
108+ <div><dt>{t.requiredPilotLevel}</dt><dd>LV {skell.requiredLevel}</dd></div>
109+ <div><dt>{t.acquisition}</dt><dd>{skell.acquisition}</dd></div>
110+ <div><dt>{t.reason}</dt><dd>{skell.reason}</dd></div>
111+ </dl>
112+ {alternatives.length > 0 && <div className="skell-alts">
113+ <small>{t.skellAlternatives}</small>
114+ {alternatives.map((alt) => (
115+ <p key={alt.frame}><b>{alt.frame}</b><span>{alt.acquisition}</span></p>
116+ ))}
117+ </div>}
118+ <h5>{t.skellWeapons}</h5>
119+ <ul className="skell-gear-list">
120+ {loadout.weapons.map((weapon) => (
121+ <li key={weapon.name}>
122+ <b>{weapon.name}</b>
123+ <small>{weapon.slot} · {weapon.attribute} · {weapon.acquisition}</small>
124+ </li>
125+ ))}
126+ </ul>
127+ <h5>{t.skellAugments}</h5>
128+ <ul className="skell-gear-list">
129+ {loadout.augments.map((augment) => <li key={augment}><b>{augment}</b></li>)}
130+ </ul>
131+ </> : <div className="skell-unavailable">
132+ <strong>{t.unavailable}</strong>
133+ <p>{!hasSkellLicense ? t.skellNoLicense : t.skellLowLevel}</p>
134+ </div>}
135+ </section>
136+ </div>
137+ </article>
138+ );
139+}
added src/components/ControlPanel.tsx +108 -0
new file mode 100644
@@ -0,0 +1,108 @@
1+import { classes } from "@/src/data/classes";
2+import type { Copy } from "@/src/data/i18n";
3+import { ancestorIds, classTree, dual, editClassRank } from "@/src/lib/engine";
4+import type { ClassEntry, Lang } from "@/src/lib/types";
5+
6+/** Class select grouped by route so each option shows which branch it belongs to. */
7+const drifter = classes.find((entry) => entry.tier === 1)!;
8+const branchGroups = [
9+ { root: drifter, entries: [drifter] },
10+ ...classes
11+ .filter((entry) => entry.tier === 2)
12+ .map((root) => ({
13+ root,
14+ entries: classes.filter((entry) =>
15+ entry.id === root.id || ancestorIds(entry.id).includes(root.id)),
16+ })),
17+];
18+
19+interface ControlPanelProps {
20+ t: Copy;
21+ lang: Lang;
22+ avatarLevel: number;
23+ activeRank: number;
24+ activeClass: string;
25+ route: ClassEntry[];
26+ selectedClass: ClassEntry;
27+ classRanks: Record<string, number>;
28+ showRanks: boolean;
29+ onAvatarLevelChange: (level: number) => void;
30+ onClassChange: (classId: string) => void;
31+ onRankChange: (rank: number) => void;
32+ onClassRankChange: (classId: string, rank: number) => void;
33+ onToggleRanks: () => void;
34+}
35+
36+export default function ControlPanel({
37+ t, lang, avatarLevel, activeRank, activeClass, route, selectedClass, classRanks, showRanks,
38+ onAvatarLevelChange, onClassChange, onRankChange, onClassRankChange, onToggleRanks,
39+}: ControlPanelProps) {
40+ return (
41+ <div className="panel controls-panel">
42+ <label className="field-label" htmlFor="avatar-level">{t.avatarLevel}<output>{avatarLevel}</output></label>
43+ <div className="level-row">
44+ <input id="avatar-level" className="level-slider" type="range" min="1" max="99" value={avatarLevel} onChange={(event) => onAvatarLevelChange(Number(event.target.value))} />
45+ <input key={`avatar-input-${avatarLevel}`} className="level-input" type="number" min="1" max="99"
46+ step="1" defaultValue={avatarLevel} aria-label={t.avatarLevel}
47+ onBlur={(event) => {
48+ const value = Math.max(1, Math.min(99, Math.trunc(Number(event.currentTarget.value) || 1)));
49+ event.currentTarget.value = String(value);
50+ onAvatarLevelChange(value);
51+ }} />
52+ </div>
53+ <div className="scale"><span>01</span><span>20</span><span>40</span><span>60</span><span>80</span><span>99</span></div>
54+
55+ <div className="field-row">
56+ <label><span>{t.activeClass}</span>
57+ <select value={activeClass} onChange={(event) => onClassChange(event.target.value)}>
58+ {branchGroups.map(({ root, entries }) => (
59+ <optgroup key={root.id} label={dual([root.en, root.fr], lang)}>
60+ {entries.map((entry) => (
61+ <option value={entry.id} key={entry.id}>
62+ {dual([entry.en, entry.fr], lang)} · T{entry.tier}
63+ </option>
64+ ))}
65+ </optgroup>
66+ ))}
67+ </select>
68+ </label>
69+ <label><span>{t.rank}</span>
70+ <select value={activeRank} onChange={(event) => onRankChange(Number(event.target.value))}>
71+ {Array.from({ length: 10 }, (_, index) => index + 1).map((value) => <option value={value} key={value}>RANK {value}</option>)}
72+ </select>
73+ </label>
74+ </div>
75+
76+ <div className="class-readout">
77+ <div><small>{t.hierarchy}</small><p>{route.map((entry) => dual([entry.en, entry.fr], lang)).join(" › ")}</p></div>
78+ <div><small>{t.weapons}</small><p>{selectedClass.ranged} <span>+</span> {selectedClass.melee}</p></div>
79+ </div>
80+ <button className="ranks-toggle" onClick={onToggleRanks} aria-expanded={showRanks}>
81+ <span>{t.allClassRanks}</span><b>{showRanks ? "−" : "+"}</b>
82+ </button>
83+ {showRanks && <div className="rank-tree">
84+ <p className="rank-hint">{t.classRanksHint}</p>
85+ {classTree().map((entry) => (
86+ <div className={`rank-row${entry.id === activeClass ? " active" : ""}`} key={entry.id} style={{ marginLeft: (entry.tier - 1) * 18 }}>
87+ <span className="rank-twig">{entry.tier > 1 ? "└" : ""}</span>
88+ <span className="rank-name">{dual([entry.en, entry.fr], lang)}<small className="rank-tier-tag">T{entry.tier}</small></span>
89+ <span className="rank-stepper">
90+ <button type="button" aria-label={t.rankDown} onClick={() => onClassRankChange(entry.id, Math.max(0, (classRanks[entry.id] ?? 0) - 1))}>−</button>
91+ <input key={`${entry.id}-${classRanks[entry.id] ?? 0}`} className="rank-value" type="number"
92+ min="0" max="10" step="1" aria-label={`${entry.en} rank`}
93+ defaultValue={classRanks[entry.id] ?? 0}
94+ onBlur={(event) => {
95+ const minimum = entry.id === activeClass ? 1 : 0;
96+ const requested = Math.max(minimum, Math.min(10, Math.trunc(Number(event.currentTarget.value) || 0)));
97+ const accepted = editClassRank(classRanks, entry.id, requested)[entry.id] ?? 0;
98+ event.currentTarget.value = String(accepted);
99+ onClassRankChange(entry.id, requested);
100+ }} />
101+ <button type="button" aria-label={t.rankUp} onClick={() => onClassRankChange(entry.id, Math.min(10, (classRanks[entry.id] ?? 0) + 1))}>+</button>
102+ </span>
103+ </div>
104+ ))}
105+ </div>}
106+ </div>
107+ );
108+}
new file mode 100644
@@ -0,0 +1,108 @@
1+import { classes } from "@/src/data/classes";
2+import type { Copy } from "@/src/data/i18n";
3+import { ancestorIds, classTree, dual, editClassRank } from "@/src/lib/engine";
4+import type { ClassEntry, Lang } from "@/src/lib/types";
5+
6+/** Class select grouped by route so each option shows which branch it belongs to. */
7+const drifter = classes.find((entry) => entry.tier === 1)!;
8+const branchGroups = [
9+ { root: drifter, entries: [drifter] },
10+ ...classes
11+ .filter((entry) => entry.tier === 2)
12+ .map((root) => ({
13+ root,
14+ entries: classes.filter((entry) =>
15+ entry.id === root.id || ancestorIds(entry.id).includes(root.id)),
16+ })),
17+];
18+
19+interface ControlPanelProps {
20+ t: Copy;
21+ lang: Lang;
22+ avatarLevel: number;
23+ activeRank: number;
24+ activeClass: string;
25+ route: ClassEntry[];
26+ selectedClass: ClassEntry;
27+ classRanks: Record<string, number>;
28+ showRanks: boolean;
29+ onAvatarLevelChange: (level: number) => void;
30+ onClassChange: (classId: string) => void;
31+ onRankChange: (rank: number) => void;
32+ onClassRankChange: (classId: string, rank: number) => void;
33+ onToggleRanks: () => void;
34+}
35+
36+export default function ControlPanel({
37+ t, lang, avatarLevel, activeRank, activeClass, route, selectedClass, classRanks, showRanks,
38+ onAvatarLevelChange, onClassChange, onRankChange, onClassRankChange, onToggleRanks,
39+}: ControlPanelProps) {
40+ return (
41+ <div className="panel controls-panel">
42+ <label className="field-label" htmlFor="avatar-level">{t.avatarLevel}<output>{avatarLevel}</output></label>
43+ <div className="level-row">
44+ <input id="avatar-level" className="level-slider" type="range" min="1" max="99" value={avatarLevel} onChange={(event) => onAvatarLevelChange(Number(event.target.value))} />
45+ <input key={`avatar-input-${avatarLevel}`} className="level-input" type="number" min="1" max="99"
46+ step="1" defaultValue={avatarLevel} aria-label={t.avatarLevel}
47+ onBlur={(event) => {
48+ const value = Math.max(1, Math.min(99, Math.trunc(Number(event.currentTarget.value) || 1)));
49+ event.currentTarget.value = String(value);
50+ onAvatarLevelChange(value);
51+ }} />
52+ </div>
53+ <div className="scale"><span>01</span><span>20</span><span>40</span><span>60</span><span>80</span><span>99</span></div>
54+
55+ <div className="field-row">
56+ <label><span>{t.activeClass}</span>
57+ <select value={activeClass} onChange={(event) => onClassChange(event.target.value)}>
58+ {branchGroups.map(({ root, entries }) => (
59+ <optgroup key={root.id} label={dual([root.en, root.fr], lang)}>
60+ {entries.map((entry) => (
61+ <option value={entry.id} key={entry.id}>
62+ {dual([entry.en, entry.fr], lang)} · T{entry.tier}
63+ </option>
64+ ))}
65+ </optgroup>
66+ ))}
67+ </select>
68+ </label>
69+ <label><span>{t.rank}</span>
70+ <select value={activeRank} onChange={(event) => onRankChange(Number(event.target.value))}>
71+ {Array.from({ length: 10 }, (_, index) => index + 1).map((value) => <option value={value} key={value}>RANK {value}</option>)}
72+ </select>
73+ </label>
74+ </div>
75+
76+ <div className="class-readout">
77+ <div><small>{t.hierarchy}</small><p>{route.map((entry) => dual([entry.en, entry.fr], lang)).join(" › ")}</p></div>
78+ <div><small>{t.weapons}</small><p>{selectedClass.ranged} <span>+</span> {selectedClass.melee}</p></div>
79+ </div>
80+ <button className="ranks-toggle" onClick={onToggleRanks} aria-expanded={showRanks}>
81+ <span>{t.allClassRanks}</span><b>{showRanks ? "−" : "+"}</b>
82+ </button>
83+ {showRanks && <div className="rank-tree">
84+ <p className="rank-hint">{t.classRanksHint}</p>
85+ {classTree().map((entry) => (
86+ <div className={`rank-row${entry.id === activeClass ? " active" : ""}`} key={entry.id} style={{ marginLeft: (entry.tier - 1) * 18 }}>
87+ <span className="rank-twig">{entry.tier > 1 ? "└" : ""}</span>
88+ <span className="rank-name">{dual([entry.en, entry.fr], lang)}<small className="rank-tier-tag">T{entry.tier}</small></span>
89+ <span className="rank-stepper">
90+ <button type="button" aria-label={t.rankDown} onClick={() => onClassRankChange(entry.id, Math.max(0, (classRanks[entry.id] ?? 0) - 1))}>−</button>
91+ <input key={`${entry.id}-${classRanks[entry.id] ?? 0}`} className="rank-value" type="number"
92+ min="0" max="10" step="1" aria-label={`${entry.en} rank`}
93+ defaultValue={classRanks[entry.id] ?? 0}
94+ onBlur={(event) => {
95+ const minimum = entry.id === activeClass ? 1 : 0;
96+ const requested = Math.max(minimum, Math.min(10, Math.trunc(Number(event.currentTarget.value) || 0)));
97+ const accepted = editClassRank(classRanks, entry.id, requested)[entry.id] ?? 0;
98+ event.currentTarget.value = String(accepted);
99+ onClassRankChange(entry.id, requested);
100+ }} />
101+ <button type="button" aria-label={t.rankUp} onClick={() => onClassRankChange(entry.id, Math.min(10, (classRanks[entry.id] ?? 0) + 1))}>+</button>
102+ </span>
103+ </div>
104+ ))}
105+ </div>}
106+ </div>
107+ );
108+}
added src/components/ResultsSection.tsx +102 -0
new file mode 100644
@@ -0,0 +1,102 @@
1+import { useState } from "react";
2+import type { Copy } from "@/src/data/i18n";
3+import BuildCard from "@/src/components/BuildCard";
4+import { dual } from "@/src/lib/engine";
5+import type { ClassEntry, Lang, RosterMember, TeamResolution } from "@/src/lib/types";
6+
7+interface ResultsSectionProps {
8+ t: Copy;
9+ lang: Lang;
10+ avatarLevel: number;
11+ route: ClassEntry[];
12+ roster: RosterMember[];
13+ resolvedTeam: TeamResolution;
14+ hasSkellLicense: boolean;
15+ postgameFrames: boolean;
16+}
17+
18+
19+export default function ResultsSection({
20+ t,
21+ lang,
22+ avatarLevel,
23+ route,
24+ roster,
25+ resolvedTeam,
26+ hasSkellLicense,
27+ postgameFrames,
28+}: ResultsSectionProps) {
29+ const avatar = roster[0]!;
30+ const [activeTab, setActiveTab] = useState(0);
31+ const currentIndex = Math.min(activeTab, roster.length - 1);
32+ const currentMember = roster[currentIndex]!;
33+ const resolvedNames = resolvedTeam.slots
34+ .map((slot) => slot.name || t.noEligibleOperator)
35+ .join(" · ");
36+ const selectionDetails = resolvedTeam.slots
37+ .map((slot, index) =>
38+ `0${index + 1} ${slot.provenance === "manual" ? t.manualPick : t.autoPick}: ${slot.name || t.noEligibleOperator}`)
39+ .join(" · ");
40+
41+ return (
42+ <section className="results is-ready" id="results">
43+ <div className="section-heading results-heading">
44+ <span className="step">02</span>
45+ <div><p>TACTICAL OUTPUT</p><h2>{t.resultsHeading}</h2></div>
46+ <div className="result-meta"><b>SQUAD LV. {avatarLevel}</b></div>
47+ </div>
48+
49+
50+ <div className="squad-summary">
51+ <div>
52+ <small>{t.activeRoute}</small>
53+ <strong>{route.map((entry) => dual([entry.en, entry.fr], lang)).join(" › ")}</strong>
54+ <span>RANK {avatar.rank} · {avatar.weapons.ranged} + {avatar.weapons.melee}</span>
55+ </div>
56+ <div>
57+ <small>{t.teamMode} · {resolvedTeam.mode.toUpperCase()}</small>
58+ <strong>{resolvedNames}</strong>
59+ <span>{selectionDetails}</span>
60+ </div>
61+ <div className="coverage-summary">
62+ <small>{t.coverage}</small>
63+ <strong>TANK {resolvedTeam.coverage.tank} · SUPPORT {resolvedTeam.coverage.support}</strong>
64+ <span>DAMAGE {resolvedTeam.coverage.damage} · CONTROL {resolvedTeam.coverage.control}</span>
65+ </div>
66+ </div>
67+
68+ <div className="build-tabs" role="tablist" aria-label={t.resultsHeading}>
69+ {roster.map((member, index) => (
70+ <button
71+ key={`${member.kind}-${member.name}`}
72+ role="tab"
73+ id={`build-tab-${index}`}
74+ aria-selected={index === currentIndex}
75+ aria-controls="build-panel"
76+ className={index === currentIndex ? "active" : undefined}
77+ onClick={() => setActiveTab(index)}
78+ >
79+ <span>{String(index + 1).padStart(2, "0")}</span>
80+ {member.name}
81+ <small>{member.className}</small>
82+ </button>
83+ ))}
84+ </div>
85+ <div className="build-panel" role="tabpanel" id="build-panel" aria-labelledby={`build-tab-${currentIndex}`}>
86+ <BuildCard
87+ key={`${currentMember.kind}-${currentMember.name}`}
88+ index={currentIndex}
89+ member={currentMember}
90+ lang={lang}
91+ t={t}
92+ hasSkellLicense={hasSkellLicense}
93+ postgameFrames={postgameFrames}
94+ />
95+ </div>
96+
97+ <aside className="method-note">
98+ <span>!</span><div><h3>{t.methodTitle}</h3><p>{t.methodBody}</p></div>
99+ </aside>
100+ </section>
101+ );
102+}
new file mode 100644
@@ -0,0 +1,102 @@
1+import { useState } from "react";
2+import type { Copy } from "@/src/data/i18n";
3+import BuildCard from "@/src/components/BuildCard";
4+import { dual } from "@/src/lib/engine";
5+import type { ClassEntry, Lang, RosterMember, TeamResolution } from "@/src/lib/types";
6+
7+interface ResultsSectionProps {
8+ t: Copy;
9+ lang: Lang;
10+ avatarLevel: number;
11+ route: ClassEntry[];
12+ roster: RosterMember[];
13+ resolvedTeam: TeamResolution;
14+ hasSkellLicense: boolean;
15+ postgameFrames: boolean;
16+}
17+
18+
19+export default function ResultsSection({
20+ t,
21+ lang,
22+ avatarLevel,
23+ route,
24+ roster,
25+ resolvedTeam,
26+ hasSkellLicense,
27+ postgameFrames,
28+}: ResultsSectionProps) {
29+ const avatar = roster[0]!;
30+ const [activeTab, setActiveTab] = useState(0);
31+ const currentIndex = Math.min(activeTab, roster.length - 1);
32+ const currentMember = roster[currentIndex]!;
33+ const resolvedNames = resolvedTeam.slots
34+ .map((slot) => slot.name || t.noEligibleOperator)
35+ .join(" · ");
36+ const selectionDetails = resolvedTeam.slots
37+ .map((slot, index) =>
38+ `0${index + 1} ${slot.provenance === "manual" ? t.manualPick : t.autoPick}: ${slot.name || t.noEligibleOperator}`)
39+ .join(" · ");
40+
41+ return (
42+ <section className="results is-ready" id="results">
43+ <div className="section-heading results-heading">
44+ <span className="step">02</span>
45+ <div><p>TACTICAL OUTPUT</p><h2>{t.resultsHeading}</h2></div>
46+ <div className="result-meta"><b>SQUAD LV. {avatarLevel}</b></div>
47+ </div>
48+
49+
50+ <div className="squad-summary">
51+ <div>
52+ <small>{t.activeRoute}</small>
53+ <strong>{route.map((entry) => dual([entry.en, entry.fr], lang)).join(" › ")}</strong>
54+ <span>RANK {avatar.rank} · {avatar.weapons.ranged} + {avatar.weapons.melee}</span>
55+ </div>
56+ <div>
57+ <small>{t.teamMode} · {resolvedTeam.mode.toUpperCase()}</small>
58+ <strong>{resolvedNames}</strong>
59+ <span>{selectionDetails}</span>
60+ </div>
61+ <div className="coverage-summary">
62+ <small>{t.coverage}</small>
63+ <strong>TANK {resolvedTeam.coverage.tank} · SUPPORT {resolvedTeam.coverage.support}</strong>
64+ <span>DAMAGE {resolvedTeam.coverage.damage} · CONTROL {resolvedTeam.coverage.control}</span>
65+ </div>
66+ </div>
67+
68+ <div className="build-tabs" role="tablist" aria-label={t.resultsHeading}>
69+ {roster.map((member, index) => (
70+ <button
71+ key={`${member.kind}-${member.name}`}
72+ role="tab"
73+ id={`build-tab-${index}`}
74+ aria-selected={index === currentIndex}
75+ aria-controls="build-panel"
76+ className={index === currentIndex ? "active" : undefined}
77+ onClick={() => setActiveTab(index)}
78+ >
79+ <span>{String(index + 1).padStart(2, "0")}</span>
80+ {member.name}
81+ <small>{member.className}</small>
82+ </button>
83+ ))}
84+ </div>
85+ <div className="build-panel" role="tabpanel" id="build-panel" aria-labelledby={`build-tab-${currentIndex}`}>
86+ <BuildCard
87+ key={`${currentMember.kind}-${currentMember.name}`}
88+ index={currentIndex}
89+ member={currentMember}
90+ lang={lang}
91+ t={t}
92+ hasSkellLicense={hasSkellLicense}
93+ postgameFrames={postgameFrames}
94+ />
95+ </div>
96+
97+ <aside className="method-note">
98+ <span>!</span><div><h3>{t.methodTitle}</h3><p>{t.methodBody}</p></div>
99+ </aside>
100+ </section>
101+ );
102+}
added src/components/SquadPanel.tsx +84 -0
new file mode 100644
@@ -0,0 +1,84 @@
1+import { companions } from "@/src/data/companions";
2+import type { Copy } from "@/src/data/i18n";
3+
4+/** Companions listed alphabetically in slot selects. */
5+const sortedCompanions = [...companions].sort((left, right) =>
6+ left.name.localeCompare(right.name, "en"));
7+
8+interface SquadPanelProps {
9+ t: Copy;
10+ team: readonly [string, string, string];
11+ resolvedTeamNames: readonly [string, string, string];
12+ effectiveLevel: number;
13+ personalRanks: readonly [number, number, number];
14+ hasSkellLicense: boolean;
15+ postgameFrames: boolean;
16+ onUpdateMember: (index: number, value: string) => void;
17+ onUpdateRank: (index: number, value: number) => void;
18+ onHasSkellLicenseChange: (value: boolean) => void;
19+ onPostgameFramesChange: (value: boolean) => void;
20+ onViewResults: () => void;
21+}
22+
23+export default function SquadPanel({
24+ t,
25+ team,
26+ resolvedTeamNames,
27+ effectiveLevel,
28+ personalRanks,
29+ hasSkellLicense,
30+ postgameFrames,
31+ onUpdateMember,
32+ onUpdateRank,
33+ onHasSkellLicenseChange,
34+ onPostgameFramesChange,
35+ onViewResults,
36+}: SquadPanelProps) {
37+ return (
38+ <div className="panel squad-panel">
39+ <div className="panel-title"><div><h3>{t.squad}</h3><p>{t.optional}</p></div><span>{team.filter(Boolean).length}/3</span></div>
40+ <div className="operator-list">
41+ {[0, 1, 2].map((index) => {
42+ const selectedName = team[index] || resolvedTeamNames[index];
43+ const selectedCompanion = companions.find((companion) => companion.name === selectedName);
44+ const minimumRank = selectedCompanion?.startRank ?? 0;
45+ const maximumRank = selectedCompanion?.maxRank ?? 20;
46+ return <div className="operator" role="group" aria-label={`${t.operator} ${index + 1}`} key={index}>
47+ <span className="operator-index">0{index + 1}</span>
48+ <select aria-label={`${t.operator} ${index + 1}`} value={team[index]} onChange={(event) => onUpdateMember(index, event.target.value)}>
49+ <option value="">{t.autoSelect}</option>
50+ {sortedCompanions
51+ .filter((companion) => companion.startLevel <= effectiveLevel || team[index] === companion.name)
52+ .filter((companion) => !team.includes(companion.name) || team[index] === companion.name)
53+ .map((companion) => <option value={companion.name} key={companion.name}>{companion.name}</option>)}
54+ </select>
55+ <span className={team[index] ? "operator-state online" : "operator-state"}>{team[index] ? t.manualState : "AUTO"}</span>
56+ <div className="operator-metrics">
57+ <label>
58+ <span>{t.personalRankShort}</span>
59+ <input key={`rank-${index}-${selectedName}`} type="number" min={minimumRank} max={maximumRank}
60+ defaultValue={Math.max(minimumRank, Math.min(maximumRank, personalRanks[index]))}
61+ aria-label={`${t.operator} ${index + 1} ${t.personalRank}`}
62+ onBlur={(event) => {
63+ const value = Math.max(minimumRank, Math.min(maximumRank, Math.trunc(Number(event.currentTarget.value) || minimumRank)));
64+ event.currentTarget.value = String(value);
65+ onUpdateRank(index, value);
66+ }} />
67+ </label>
68+ </div>
69+ </div>;
70+ })}
71+ </div>
72+
73+ <fieldset className="progression-controls">
74+ <legend>{t.skellProgression}</legend>
75+ <label><input type="checkbox" checked={hasSkellLicense} onChange={(event) => onHasSkellLicenseChange(event.target.checked)} />{t.skellLicense}</label>
76+ <label className={!hasSkellLicense ? "disabled" : undefined}><input type="checkbox" checked={postgameFrames} disabled={!hasSkellLicense} onChange={(event) => onPostgameFramesChange(event.target.checked)} />{t.postgameFrames}</label>
77+ </fieldset>
78+
79+ <button className="generate-button" onClick={onViewResults}>
80+ <span>{t.viewResults}</span><b>↗</b>
81+ </button>
82+ </div>
83+ );
84+}
new file mode 100644
@@ -0,0 +1,84 @@
1+import { companions } from "@/src/data/companions";
2+import type { Copy } from "@/src/data/i18n";
3+
4+/** Companions listed alphabetically in slot selects. */
5+const sortedCompanions = [...companions].sort((left, right) =>
6+ left.name.localeCompare(right.name, "en"));
7+
8+interface SquadPanelProps {
9+ t: Copy;
10+ team: readonly [string, string, string];
11+ resolvedTeamNames: readonly [string, string, string];
12+ effectiveLevel: number;
13+ personalRanks: readonly [number, number, number];
14+ hasSkellLicense: boolean;
15+ postgameFrames: boolean;
16+ onUpdateMember: (index: number, value: string) => void;
17+ onUpdateRank: (index: number, value: number) => void;
18+ onHasSkellLicenseChange: (value: boolean) => void;
19+ onPostgameFramesChange: (value: boolean) => void;
20+ onViewResults: () => void;
21+}
22+
23+export default function SquadPanel({
24+ t,
25+ team,
26+ resolvedTeamNames,
27+ effectiveLevel,
28+ personalRanks,
29+ hasSkellLicense,
30+ postgameFrames,
31+ onUpdateMember,
32+ onUpdateRank,
33+ onHasSkellLicenseChange,
34+ onPostgameFramesChange,
35+ onViewResults,
36+}: SquadPanelProps) {
37+ return (
38+ <div className="panel squad-panel">
39+ <div className="panel-title"><div><h3>{t.squad}</h3><p>{t.optional}</p></div><span>{team.filter(Boolean).length}/3</span></div>
40+ <div className="operator-list">
41+ {[0, 1, 2].map((index) => {
42+ const selectedName = team[index] || resolvedTeamNames[index];
43+ const selectedCompanion = companions.find((companion) => companion.name === selectedName);
44+ const minimumRank = selectedCompanion?.startRank ?? 0;
45+ const maximumRank = selectedCompanion?.maxRank ?? 20;
46+ return <div className="operator" role="group" aria-label={`${t.operator} ${index + 1}`} key={index}>
47+ <span className="operator-index">0{index + 1}</span>
48+ <select aria-label={`${t.operator} ${index + 1}`} value={team[index]} onChange={(event) => onUpdateMember(index, event.target.value)}>
49+ <option value="">{t.autoSelect}</option>
50+ {sortedCompanions
51+ .filter((companion) => companion.startLevel <= effectiveLevel || team[index] === companion.name)
52+ .filter((companion) => !team.includes(companion.name) || team[index] === companion.name)
53+ .map((companion) => <option value={companion.name} key={companion.name}>{companion.name}</option>)}
54+ </select>
55+ <span className={team[index] ? "operator-state online" : "operator-state"}>{team[index] ? t.manualState : "AUTO"}</span>
56+ <div className="operator-metrics">
57+ <label>
58+ <span>{t.personalRankShort}</span>
59+ <input key={`rank-${index}-${selectedName}`} type="number" min={minimumRank} max={maximumRank}
60+ defaultValue={Math.max(minimumRank, Math.min(maximumRank, personalRanks[index]))}
61+ aria-label={`${t.operator} ${index + 1} ${t.personalRank}`}
62+ onBlur={(event) => {
63+ const value = Math.max(minimumRank, Math.min(maximumRank, Math.trunc(Number(event.currentTarget.value) || minimumRank)));
64+ event.currentTarget.value = String(value);
65+ onUpdateRank(index, value);
66+ }} />
67+ </label>
68+ </div>
69+ </div>;
70+ })}
71+ </div>
72+
73+ <fieldset className="progression-controls">
74+ <legend>{t.skellProgression}</legend>
75+ <label><input type="checkbox" checked={hasSkellLicense} onChange={(event) => onHasSkellLicenseChange(event.target.checked)} />{t.skellLicense}</label>
76+ <label className={!hasSkellLicense ? "disabled" : undefined}><input type="checkbox" checked={postgameFrames} disabled={!hasSkellLicense} onChange={(event) => onPostgameFramesChange(event.target.checked)} />{t.postgameFrames}</label>
77+ </fieldset>
78+
79+ <button className="generate-button" onClick={onViewResults}>
80+ <span>{t.viewResults}</span><b>↗</b>
81+ </button>
82+ </div>
83+ );
84+}
added src/components/TeamBuilder.tsx +160 -0
new file mode 100644
@@ -0,0 +1,160 @@
1+"use client";
2+
3+import { useEffect, useMemo, useState } from "react";
4+import { classes } from "@/src/data/classes";
5+import { copy } from "@/src/data/i18n";
6+import {
7+ buildRoster,
8+ classRanksForActiveClass,
9+ classRoute,
10+ editClassRank,
11+ normalizeClassRanks,
12+ resolveTeam,
13+} from "@/src/lib/engine";
14+import type { Lang } from "@/src/lib/types";
15+import ControlPanel from "@/src/components/ControlPanel";
16+import ResultsSection from "@/src/components/ResultsSection";
17+import SiteFooter from "@/src/components/SiteFooter";
18+import SquadPanel from "@/src/components/SquadPanel";
19+import Topbar from "@/src/components/Topbar";
20+
21+export default function TeamBuilder() {
22+ const [lang, setLang] = useState<Lang>("en");
23+ const [avatarLevel, setAvatarLevel] = useState(30);
24+ const [activeClass, setActiveClass] = useState("duelist");
25+ const [team, setTeam] = useState<[string, string, string]>(["", "", ""]);
26+ const [personalRanks, setPersonalRanks] = useState<[number, number, number]>([10, 10, 10]);
27+ const [classRanks, setClassRanks] = useState<Record<string, number>>(() =>
28+ normalizeClassRanks({
29+ drifter: 10,
30+ striker: 10,
31+ "samurai-gunner": 10,
32+ duelist: 10,
33+ }),
34+ );
35+ const [showRanks, setShowRanks] = useState(false);
36+ const [hasSkellLicense, setHasSkellLicense] = useState(false);
37+ const [postgameFrames, setPostgameFrames] = useState(false);
38+
39+ const t = copy[lang];
40+ useEffect(() => {
41+ document.documentElement.lang = lang;
42+ }, [lang]);
43+ const selectedClass = classes.find((entry) => entry.id === activeClass)!;
44+ const activeRank = classRanks[activeClass] ?? 0;
45+ const route = useMemo(() => classRoute(selectedClass), [selectedClass]);
46+ const resolvedTeam = useMemo(
47+ () => resolveTeam(team, activeClass, avatarLevel),
48+ [team, activeClass, avatarLevel],
49+ );
50+ const roster = buildRoster(
51+ avatarLevel,
52+ activeClass,
53+ classRanks,
54+ resolvedTeam,
55+ personalRanks,
56+ );
57+
58+ function handleClassChange(classId: string) {
59+ setClassRanks((current) => classRanksForActiveClass(classId, current));
60+ setActiveClass(classId);
61+ }
62+
63+ function handleClassRankChange(classId: string, value: number) {
64+ const minimum = classId === activeClass ? 1 : 0;
65+ const next = editClassRank(classRanks, classId, Math.max(minimum, Math.min(10, value)));
66+ let nextActive = activeClass;
67+ if ((next[nextActive] ?? 0) < 1) nextActive = "drifter";
68+ next[nextActive] = Math.max(1, next[nextActive] ?? 0);
69+ setClassRanks(next);
70+ if (nextActive !== activeClass) setActiveClass(nextActive);
71+ }
72+
73+ function updateMember(index: number, value: string) {
74+ setTeam((current) =>
75+ current.map((member, slot) => slot === index ? value : member) as [
76+ string,
77+ string,
78+ string,
79+ ],
80+ );
81+ }
82+
83+ function updatePersonalRank(index: number, value: number) {
84+ setPersonalRanks((current) =>
85+ current.map((rank, slot) => slot === index ? value : rank) as [
86+ number,
87+ number,
88+ number,
89+ ],
90+ );
91+ }
92+
93+ function viewResults() {
94+ window.setTimeout(() => document.getElementById("results")?.scrollIntoView({ behavior: "smooth", block: "start" }), 40);
95+ }
96+
97+ return (
98+ <main>
99+ <div className="scanlines" aria-hidden="true" />
100+ <Topbar t={t} lang={lang} onLangChange={setLang} />
101+
102+ <section className="builder-shell" aria-label="Team configuration">
103+ <div className="section-heading">
104+ <span className="step">01</span>
105+ <div><p>MISSION PARAMETERS</p><h2>{t.builderHeading}</h2></div>
106+ <span className="section-code">XCX-DE // MIRA</span>
107+ </div>
108+
109+ <div className="builder-grid">
110+ <ControlPanel
111+ t={t}
112+ lang={lang}
113+ avatarLevel={avatarLevel}
114+ activeRank={activeRank}
115+ activeClass={activeClass}
116+ route={route}
117+ selectedClass={selectedClass}
118+ classRanks={classRanks}
119+ showRanks={showRanks}
120+ onAvatarLevelChange={setAvatarLevel}
121+ onClassChange={handleClassChange}
122+ onRankChange={(value) => handleClassRankChange(activeClass, value)}
123+ onClassRankChange={handleClassRankChange}
124+ onToggleRanks={() => setShowRanks((value) => !value)}
125+ />
126+ <SquadPanel
127+ t={t}
128+ team={team}
129+ resolvedTeamNames={resolvedTeam.names}
130+ effectiveLevel={avatarLevel}
131+ personalRanks={personalRanks}
132+ hasSkellLicense={hasSkellLicense}
133+ postgameFrames={postgameFrames}
134+ onUpdateMember={updateMember}
135+ onUpdateRank={updatePersonalRank}
136+ onHasSkellLicenseChange={(value) => {
137+ setHasSkellLicense(value);
138+ if (!value) setPostgameFrames(false);
139+ }}
140+ onPostgameFramesChange={setPostgameFrames}
141+ onViewResults={viewResults}
142+ />
143+ </div>
144+ </section>
145+
146+ <ResultsSection
147+ t={t}
148+ lang={lang}
149+ avatarLevel={avatarLevel}
150+ route={route}
151+ roster={roster}
152+ resolvedTeam={resolvedTeam}
153+ hasSkellLicense={hasSkellLicense}
154+ postgameFrames={hasSkellLicense && postgameFrames}
155+ />
156+
157+ <SiteFooter t={t} />
158+ </main>
159+ );
160+}
new file mode 100644
@@ -0,0 +1,160 @@
1+"use client";
2+
3+import { useEffect, useMemo, useState } from "react";
4+import { classes } from "@/src/data/classes";
5+import { copy } from "@/src/data/i18n";
6+import {
7+ buildRoster,
8+ classRanksForActiveClass,
9+ classRoute,
10+ editClassRank,
11+ normalizeClassRanks,
12+ resolveTeam,
13+} from "@/src/lib/engine";
14+import type { Lang } from "@/src/lib/types";
15+import ControlPanel from "@/src/components/ControlPanel";
16+import ResultsSection from "@/src/components/ResultsSection";
17+import SiteFooter from "@/src/components/SiteFooter";
18+import SquadPanel from "@/src/components/SquadPanel";
19+import Topbar from "@/src/components/Topbar";
20+
21+export default function TeamBuilder() {
22+ const [lang, setLang] = useState<Lang>("en");
23+ const [avatarLevel, setAvatarLevel] = useState(30);
24+ const [activeClass, setActiveClass] = useState("duelist");
25+ const [team, setTeam] = useState<[string, string, string]>(["", "", ""]);
26+ const [personalRanks, setPersonalRanks] = useState<[number, number, number]>([10, 10, 10]);
27+ const [classRanks, setClassRanks] = useState<Record<string, number>>(() =>
28+ normalizeClassRanks({
29+ drifter: 10,
30+ striker: 10,
31+ "samurai-gunner": 10,
32+ duelist: 10,
33+ }),
34+ );
35+ const [showRanks, setShowRanks] = useState(false);
36+ const [hasSkellLicense, setHasSkellLicense] = useState(false);
37+ const [postgameFrames, setPostgameFrames] = useState(false);
38+
39+ const t = copy[lang];
40+ useEffect(() => {
41+ document.documentElement.lang = lang;
42+ }, [lang]);
43+ const selectedClass = classes.find((entry) => entry.id === activeClass)!;
44+ const activeRank = classRanks[activeClass] ?? 0;
45+ const route = useMemo(() => classRoute(selectedClass), [selectedClass]);
46+ const resolvedTeam = useMemo(
47+ () => resolveTeam(team, activeClass, avatarLevel),
48+ [team, activeClass, avatarLevel],
49+ );
50+ const roster = buildRoster(
51+ avatarLevel,
52+ activeClass,
53+ classRanks,
54+ resolvedTeam,
55+ personalRanks,
56+ );
57+
58+ function handleClassChange(classId: string) {
59+ setClassRanks((current) => classRanksForActiveClass(classId, current));
60+ setActiveClass(classId);
61+ }
62+
63+ function handleClassRankChange(classId: string, value: number) {
64+ const minimum = classId === activeClass ? 1 : 0;
65+ const next = editClassRank(classRanks, classId, Math.max(minimum, Math.min(10, value)));
66+ let nextActive = activeClass;
67+ if ((next[nextActive] ?? 0) < 1) nextActive = "drifter";
68+ next[nextActive] = Math.max(1, next[nextActive] ?? 0);
69+ setClassRanks(next);
70+ if (nextActive !== activeClass) setActiveClass(nextActive);
71+ }
72+
73+ function updateMember(index: number, value: string) {
74+ setTeam((current) =>
75+ current.map((member, slot) => slot === index ? value : member) as [
76+ string,
77+ string,
78+ string,
79+ ],
80+ );
81+ }
82+
83+ function updatePersonalRank(index: number, value: number) {
84+ setPersonalRanks((current) =>
85+ current.map((rank, slot) => slot === index ? value : rank) as [
86+ number,
87+ number,
88+ number,
89+ ],
90+ );
91+ }
92+
93+ function viewResults() {
94+ window.setTimeout(() => document.getElementById("results")?.scrollIntoView({ behavior: "smooth", block: "start" }), 40);
95+ }
96+
97+ return (
98+ <main>
99+ <div className="scanlines" aria-hidden="true" />
100+ <Topbar t={t} lang={lang} onLangChange={setLang} />
101+
102+ <section className="builder-shell" aria-label="Team configuration">
103+ <div className="section-heading">
104+ <span className="step">01</span>
105+ <div><p>MISSION PARAMETERS</p><h2>{t.builderHeading}</h2></div>
106+ <span className="section-code">XCX-DE // MIRA</span>
107+ </div>
108+
109+ <div className="builder-grid">
110+ <ControlPanel
111+ t={t}
112+ lang={lang}
113+ avatarLevel={avatarLevel}
114+ activeRank={activeRank}
115+ activeClass={activeClass}
116+ route={route}
117+ selectedClass={selectedClass}
118+ classRanks={classRanks}
119+ showRanks={showRanks}
120+ onAvatarLevelChange={setAvatarLevel}
121+ onClassChange={handleClassChange}
122+ onRankChange={(value) => handleClassRankChange(activeClass, value)}
123+ onClassRankChange={handleClassRankChange}
124+ onToggleRanks={() => setShowRanks((value) => !value)}
125+ />
126+ <SquadPanel
127+ t={t}
128+ team={team}
129+ resolvedTeamNames={resolvedTeam.names}
130+ effectiveLevel={avatarLevel}
131+ personalRanks={personalRanks}
132+ hasSkellLicense={hasSkellLicense}
133+ postgameFrames={postgameFrames}
134+ onUpdateMember={updateMember}
135+ onUpdateRank={updatePersonalRank}
136+ onHasSkellLicenseChange={(value) => {
137+ setHasSkellLicense(value);
138+ if (!value) setPostgameFrames(false);
139+ }}
140+ onPostgameFramesChange={setPostgameFrames}
141+ onViewResults={viewResults}
142+ />
143+ </div>
144+ </section>
145+
146+ <ResultsSection
147+ t={t}
148+ lang={lang}
149+ avatarLevel={avatarLevel}
150+ route={route}
151+ roster={roster}
152+ resolvedTeam={resolvedTeam}
153+ hasSkellLicense={hasSkellLicense}
154+ postgameFrames={hasSkellLicense && postgameFrames}
155+ />
156+
157+ <SiteFooter t={t} />
158+ </main>
159+ );
160+}
added src/components/Topbar.tsx +24 -0
new file mode 100644
@@ -0,0 +1,24 @@
1+import type { Copy } from "@/src/data/i18n";
2+import type { Lang } from "@/src/lib/types";
3+
4+interface TopbarProps {
5+ t: Copy;
6+ lang: Lang;
7+ onLangChange: (lang: Lang) => void;
8+}
9+
10+export default function Topbar({ t, lang, onLangChange }: TopbarProps) {
11+ return (
12+ <header className="topbar">
13+ <a className="brand" href="#top" aria-label="BLADE Team Architect home">
14+ <span className="brand-mark">B</span>
15+ <span><b>BLADE</b><small>TEAM ARCHITECT</small></span>
16+ </a>
17+ <div className="top-status"><span className="pulse" /> {t.status}</div>
18+ <div className="language-switch" aria-label="Language">
19+ <button className={lang === "en" ? "active" : ""} onClick={() => onLangChange("en")}>EN</button>
20+ <button className={lang === "fr" ? "active" : ""} onClick={() => onLangChange("fr")}>FR</button>
21+ </div>
22+ </header>
23+ );
24+}
new file mode 100644
@@ -0,0 +1,24 @@
1+import type { Copy } from "@/src/data/i18n";
2+import type { Lang } from "@/src/lib/types";
3+
4+interface TopbarProps {
5+ t: Copy;
6+ lang: Lang;
7+ onLangChange: (lang: Lang) => void;
8+}
9+
10+export default function Topbar({ t, lang, onLangChange }: TopbarProps) {
11+ return (
12+ <header className="topbar">
13+ <a className="brand" href="#top" aria-label="BLADE Team Architect home">
14+ <span className="brand-mark">B</span>
15+ <span><b>BLADE</b><small>TEAM ARCHITECT</small></span>
16+ </a>
17+ <div className="top-status"><span className="pulse" /> {t.status}</div>
18+ <div className="language-switch" aria-label="Language">
19+ <button className={lang === "en" ? "active" : ""} onClick={() => onLangChange("en")}>EN</button>
20+ <button className={lang === "fr" ? "active" : ""} onClick={() => onLangChange("fr")}>FR</button>
21+ </div>
22+ </header>
23+ );
24+}
added src/data/arms.ts +18 -0
new file mode 100644
@@ -0,0 +1,18 @@
1+import type { LocalizedText, StrategyKey } from "@/src/lib/types";
2+
3+export interface ArmsManufacturer {
4+ name: string;
5+ specialty: LocalizedText;
6+}
7+
8+/** Heuristic strategy → manufacturer match; company facts live on the wiki. */
9+export const armsManufacturerSource = "https://www.xenoserieswiki.org/wiki/Arms_Manufacturer";
10+
11+export const armsManufacturers: Record<StrategyKey, ArmsManufacturer> = {
12+ duelist: { name: "Sakuraba Industries", specialty: ["Melee attack & balanced thermal gear", "Attaque au corps-à-corps & équipement thermique équilibré"] },
13+ bastion: { name: "Meredith & Co.", specialty: ["Heavy armor, HP & physical defense", "Armure lourde, PV & défense physique"] },
14+ jaguar: { name: "Candid & Credible", specialty: ["Evasion & ether ranged weapons", "Esquive & armes à distance Éther"] },
15+ astral: { name: "Grenada Galactic Group", specialty: ["Ranged accuracy & beam precision", "Précision à distance & armes laser"] },
16+ mastermind: { name: "Orphean Technologies", specialty: ["Ether support & debuff amplifiers", "Soutien Éther & amplification d’altérations"] },
17+ galactic: { name: "Six Stars", specialty: ["High-tier beam & gravity weapons", "Armes laser & gravité haut de gamme"] },
18+};
new file mode 100644
@@ -0,0 +1,18 @@
1+import type { LocalizedText, StrategyKey } from "@/src/lib/types";
2+
3+export interface ArmsManufacturer {
4+ name: string;
5+ specialty: LocalizedText;
6+}
7+
8+/** Heuristic strategy → manufacturer match; company facts live on the wiki. */
9+export const armsManufacturerSource = "https://www.xenoserieswiki.org/wiki/Arms_Manufacturer";
10+
11+export const armsManufacturers: Record<StrategyKey, ArmsManufacturer> = {
12+ duelist: { name: "Sakuraba Industries", specialty: ["Melee attack & balanced thermal gear", "Attaque au corps-à-corps & équipement thermique équilibré"] },
13+ bastion: { name: "Meredith & Co.", specialty: ["Heavy armor, HP & physical defense", "Armure lourde, PV & défense physique"] },
14+ jaguar: { name: "Candid & Credible", specialty: ["Evasion & ether ranged weapons", "Esquive & armes à distance Éther"] },
15+ astral: { name: "Grenada Galactic Group", specialty: ["Ranged accuracy & beam precision", "Précision à distance & armes laser"] },
16+ mastermind: { name: "Orphean Technologies", specialty: ["Ether support & debuff amplifiers", "Soutien Éther & amplification d’altérations"] },
17+ galactic: { name: "Six Stars", specialty: ["High-tier beam & gravity weapons", "Armes laser & gravité haut de gamme"] },
18+};
added src/data/builds.ts +95 -0
new file mode 100644
@@ -0,0 +1,95 @@
1+import type { BuildStrategy, StrategyKey } from "@/src/lib/types";
2+
3+/**
4+ * Tactical heuristics only. Class and companion facts, including weapon and
5+ * unlock pools, deliberately live in progression.ts and companions.ts.
6+ */
7+export const buildStrategies: Record<StrategyKey, BuildStrategy> = {
8+ duelist: {
9+ role: ["Thermal melee DPS", "DPS thermique au corps-à-corps"],
10+ damage: "THERMAL / PHYSICAL",
11+ preferredArts: ["Offensive Stance", "Burning Slash", "Incendiary Edge", "Tornado Blade", "Magnum Edge", "Gunforce", "Takedown Shot", "Last Stand"],
12+ preferredSkills: ["Conflagrant Edge", "Mighty Muscle", "Combo Gunner", "Fast Forward", "Aura Assault"],
13+ statPriority: ["Melee Attack", "Thermal Attack", "Potential", "TP Gain"],
14+ capabilities: { tank: 0, support: 0, damage: 3, control: 1 },
15+ skellRole: ["Heavy melee striker", "Frappeur lourd au corps-à-corps"],
16+ },
17+ bastion: {
18+ role: ["Topple tank / aggro control", "Tank Chute / contrôle de l’aggro"],
19+ damage: "PHYSICAL / THERMAL",
20+ preferredArts: ["Wild Down", "Wild Smash", "Trash Talk", "Shield Wall", "Iron Prison", "Thermal Payload", "Bullet Storm", "Cool Off"],
21+ preferredSkills: ["Steel Flesh", "Stand Strong", "Shield Screen", "Dirty Fighter", "Fortified Flesh"],
22+ statPriority: ["Max HP", "Physical Resist", "Debuff Resist", "Melee Accuracy"],
23+ capabilities: { tank: 3, support: 1, damage: 1, control: 3 },
24+ skellRole: ["Durable draw-tank", "Tank résistant à provocation"],
25+ },
26+ jaguar: {
27+ role: ["Evasion / Overdrive damage", "Esquive / dégâts en Métamode"],
28+ damage: "ETHER / PHYSICAL",
29+ preferredArts: ["Ghostwalker", "Primer", "Violent Streak", "Ghost Factory", "Executioner", "Sliding Slinger", "Electric Surge", "Combat Limbo"],
30+ preferredSkills: ["Trigger Happy", "Combo Gunner", "Grand Procession", "Crisis Catalyst", "Fast Forward"],
31+ statPriority: ["Potential", "Evasion", "Ranged Attack", "TP Gain"],
32+ capabilities: { tank: 1, support: 0, damage: 3, control: 1 },
33+ skellRole: ["Agile striker", "Frappeur agile"],
34+ },
35+ astral: {
36+ role: ["Ranged appendage breaker", "Briseur d’appendices à distance"],
37+ damage: "ELECTRIC / PHYSICAL",
38+ preferredArts: ["Hawkeye", "Arcing Horn", "Shrapnel", "Spiral Horn", "Sidewinder", "Ghost Sniper", "Trident Buster", "Overwhelm"],
39+ preferredSkills: ["Long Topple", "Electric Boost", "Trigger Happy", "Secondary Accelerator", "Unstoppable"],
40+ statPriority: ["Ranged Attack", "Ranged Accuracy", "Electric Attack", "Appendage Damage"],
41+ capabilities: { tank: 0, support: 1, damage: 3, control: 2 },
42+ skellRole: ["Precision artillery", "Artillerie de précision"],
43+ },
44+ mastermind: {
45+ role: ["Ether support / control", "Soutien Éther / contrôle"],
46+ damage: "ETHER / BEAM",
47+ preferredArts: ["Repair", "Absorber Skin", "Energy Source", "Black Butterfly", "Brainjack", "Servant Sacrifice", "Dispel", "Gravity Cloak"],
48+ preferredSkills: ["Inner Search", "Healing Touch", "High Tension", "Tactical Analyst", "King's Decree"],
49+ statPriority: ["Potential", "Ether Attack", "Max TP", "Debuff Resistance Down"],
50+ capabilities: { tank: 0, support: 3, damage: 1, control: 3 },
51+ skellRole: ["Support / ranged control", "Soutien / contrôle à distance"],
52+ },
53+ galactic: {
54+ role: ["Beam melee burst", "Burst laser au corps-à-corps"],
55+ damage: "BEAM / GRAVITY",
56+ preferredArts: ["Starfall Blade", "Starfall Rondo", "Astral Heal", "Novalibrium", "Stellar Ray", "Gravity Blast", "Astral Protection", "Galactic Cataclysm"],
57+ preferredSkills: ["Supreme Sword", "Beam Boost", "Aura Assault", "Knight's Soul", "Synchrony"],
58+ statPriority: ["Melee Attack", "Potential", "Beam Attack", "Secondary Cooldown"],
59+ capabilities: { tank: 1, support: 2, damage: 3, control: 1 },
60+ skellRole: ["Beam / gravity duelist", "Duelliste laser / gravité"],
61+ },
62+};
63+
64+/**
65+ * General-purpose AUTO tie-break from one current DE editorial ranking.
66+ * Coverage remains the hard priority; this only ranks equally complete teams.
67+ * Source: https://www.escapistmagazine.com/xenoblade-chronicles-x-best-party-members/
68+ */
69+export const companionSelectionPriority: Readonly<Record<string, number>> = {
70+ Elma: 5,
71+ Irina: 5,
72+ Nagi: 5,
73+ Mia: 5,
74+ "H.B.": 5,
75+};
76+
77+/** Heuristic strategy assignment for each Avatar class. */
78+export const classStrategy: Record<string, StrategyKey> = {
79+ drifter: "duelist",
80+ striker: "duelist",
81+ "samurai-gunner": "duelist",
82+ duelist: "duelist",
83+ "shield-trooper": "bastion",
84+ "bastion-warrior": "bastion",
85+ commando: "jaguar",
86+ "winged-viper": "jaguar",
87+ "full-metal-jaguar": "jaguar",
88+ "partisan-eagle": "astral",
89+ "astral-crusader": "astral",
90+ enforcer: "mastermind",
91+ psycorruptor: "mastermind",
92+ mastermind: "mastermind",
93+ "blast-fencer": "galactic",
94+ "galactic-knight": "galactic",
95+};
new file mode 100644
@@ -0,0 +1,95 @@
1+import type { BuildStrategy, StrategyKey } from "@/src/lib/types";
2+
3+/**
4+ * Tactical heuristics only. Class and companion facts, including weapon and
5+ * unlock pools, deliberately live in progression.ts and companions.ts.
6+ */
7+export const buildStrategies: Record<StrategyKey, BuildStrategy> = {
8+ duelist: {
9+ role: ["Thermal melee DPS", "DPS thermique au corps-à-corps"],
10+ damage: "THERMAL / PHYSICAL",
11+ preferredArts: ["Offensive Stance", "Burning Slash", "Incendiary Edge", "Tornado Blade", "Magnum Edge", "Gunforce", "Takedown Shot", "Last Stand"],
12+ preferredSkills: ["Conflagrant Edge", "Mighty Muscle", "Combo Gunner", "Fast Forward", "Aura Assault"],
13+ statPriority: ["Melee Attack", "Thermal Attack", "Potential", "TP Gain"],
14+ capabilities: { tank: 0, support: 0, damage: 3, control: 1 },
15+ skellRole: ["Heavy melee striker", "Frappeur lourd au corps-à-corps"],
16+ },
17+ bastion: {
18+ role: ["Topple tank / aggro control", "Tank Chute / contrôle de l’aggro"],
19+ damage: "PHYSICAL / THERMAL",
20+ preferredArts: ["Wild Down", "Wild Smash", "Trash Talk", "Shield Wall", "Iron Prison", "Thermal Payload", "Bullet Storm", "Cool Off"],
21+ preferredSkills: ["Steel Flesh", "Stand Strong", "Shield Screen", "Dirty Fighter", "Fortified Flesh"],
22+ statPriority: ["Max HP", "Physical Resist", "Debuff Resist", "Melee Accuracy"],
23+ capabilities: { tank: 3, support: 1, damage: 1, control: 3 },
24+ skellRole: ["Durable draw-tank", "Tank résistant à provocation"],
25+ },
26+ jaguar: {
27+ role: ["Evasion / Overdrive damage", "Esquive / dégâts en Métamode"],
28+ damage: "ETHER / PHYSICAL",
29+ preferredArts: ["Ghostwalker", "Primer", "Violent Streak", "Ghost Factory", "Executioner", "Sliding Slinger", "Electric Surge", "Combat Limbo"],
30+ preferredSkills: ["Trigger Happy", "Combo Gunner", "Grand Procession", "Crisis Catalyst", "Fast Forward"],
31+ statPriority: ["Potential", "Evasion", "Ranged Attack", "TP Gain"],
32+ capabilities: { tank: 1, support: 0, damage: 3, control: 1 },
33+ skellRole: ["Agile striker", "Frappeur agile"],
34+ },
35+ astral: {
36+ role: ["Ranged appendage breaker", "Briseur d’appendices à distance"],
37+ damage: "ELECTRIC / PHYSICAL",
38+ preferredArts: ["Hawkeye", "Arcing Horn", "Shrapnel", "Spiral Horn", "Sidewinder", "Ghost Sniper", "Trident Buster", "Overwhelm"],
39+ preferredSkills: ["Long Topple", "Electric Boost", "Trigger Happy", "Secondary Accelerator", "Unstoppable"],
40+ statPriority: ["Ranged Attack", "Ranged Accuracy", "Electric Attack", "Appendage Damage"],
41+ capabilities: { tank: 0, support: 1, damage: 3, control: 2 },
42+ skellRole: ["Precision artillery", "Artillerie de précision"],
43+ },
44+ mastermind: {
45+ role: ["Ether support / control", "Soutien Éther / contrôle"],
46+ damage: "ETHER / BEAM",
47+ preferredArts: ["Repair", "Absorber Skin", "Energy Source", "Black Butterfly", "Brainjack", "Servant Sacrifice", "Dispel", "Gravity Cloak"],
48+ preferredSkills: ["Inner Search", "Healing Touch", "High Tension", "Tactical Analyst", "King's Decree"],
49+ statPriority: ["Potential", "Ether Attack", "Max TP", "Debuff Resistance Down"],
50+ capabilities: { tank: 0, support: 3, damage: 1, control: 3 },
51+ skellRole: ["Support / ranged control", "Soutien / contrôle à distance"],
52+ },
53+ galactic: {
54+ role: ["Beam melee burst", "Burst laser au corps-à-corps"],
55+ damage: "BEAM / GRAVITY",
56+ preferredArts: ["Starfall Blade", "Starfall Rondo", "Astral Heal", "Novalibrium", "Stellar Ray", "Gravity Blast", "Astral Protection", "Galactic Cataclysm"],
57+ preferredSkills: ["Supreme Sword", "Beam Boost", "Aura Assault", "Knight's Soul", "Synchrony"],
58+ statPriority: ["Melee Attack", "Potential", "Beam Attack", "Secondary Cooldown"],
59+ capabilities: { tank: 1, support: 2, damage: 3, control: 1 },
60+ skellRole: ["Beam / gravity duelist", "Duelliste laser / gravité"],
61+ },
62+};
63+
64+/**
65+ * General-purpose AUTO tie-break from one current DE editorial ranking.
66+ * Coverage remains the hard priority; this only ranks equally complete teams.
67+ * Source: https://www.escapistmagazine.com/xenoblade-chronicles-x-best-party-members/
68+ */
69+export const companionSelectionPriority: Readonly<Record<string, number>> = {
70+ Elma: 5,
71+ Irina: 5,
72+ Nagi: 5,
73+ Mia: 5,
74+ "H.B.": 5,
75+};
76+
77+/** Heuristic strategy assignment for each Avatar class. */
78+export const classStrategy: Record<string, StrategyKey> = {
79+ drifter: "duelist",
80+ striker: "duelist",
81+ "samurai-gunner": "duelist",
82+ duelist: "duelist",
83+ "shield-trooper": "bastion",
84+ "bastion-warrior": "bastion",
85+ commando: "jaguar",
86+ "winged-viper": "jaguar",
87+ "full-metal-jaguar": "jaguar",
88+ "partisan-eagle": "astral",
89+ "astral-crusader": "astral",
90+ enforcer: "mastermind",
91+ psycorruptor: "mastermind",
92+ mastermind: "mastermind",
93+ "blast-fencer": "galactic",
94+ "galactic-knight": "galactic",
95+};
added src/data/classes.ts +22 -0
new file mode 100644
@@ -0,0 +1,22 @@
1+import type { ClassEntry } from "@/src/lib/types";
2+
3+/** XCX:DE class tree; factual skill-slot caps come from canonical class data. */
4+export const classes: ClassEntry[] = [
5+ { id: "drifter", en: "Drifter", fr: "Aventurier", tier: 1, ranged: "Assault Rifle", melee: "Knife", skillSlots: 5 },
6+ { id: "striker", en: "Striker", fr: "Frappeur", tier: 2, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 1, parent: "drifter" },
7+ { id: "commando", en: "Commando", fr: "Commando", tier: 2, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 2, parent: "drifter" },
8+ { id: "enforcer", en: "Enforcer", fr: "Exécuteur", tier: 2, ranged: "Raygun", melee: "Knife", skillSlots: 2, parent: "drifter" },
9+ { id: "samurai-gunner", en: "Samurai Gunner", fr: "Artilleur samouraï", tier: 3, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 2, parent: "striker" },
10+ { id: "shield-trooper", en: "Shield Trooper", fr: "Soldat bouclier", tier: 3, ranged: "Gatling Gun", melee: "Shield", skillSlots: 3, parent: "striker" },
11+ { id: "winged-viper", en: "Winged Viper", fr: "Vipère ailée", tier: 3, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 3, parent: "commando" },
12+ { id: "partisan-eagle", en: "Partisan Eagle", fr: "Aigle partisan", tier: 3, ranged: "Sniper Rifle", melee: "Javelin", skillSlots: 3, parent: "commando" },
13+ { id: "psycorruptor", en: "Psycorruptor", fr: "Psycorrupteur", tier: 3, ranged: "Raygun", melee: "Knife", skillSlots: 3, parent: "enforcer" },
14+ { id: "blast-fencer", en: "Blast Fencer", fr: "Escrimeur explosif", tier: 3, ranged: "Psycho Launchers", melee: "Photon Saber", skillSlots: 3, parent: "enforcer" },
15+ { id: "duelist", en: "Duelist", fr: "Duelliste", tier: 4, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 3, parent: "samurai-gunner" },
16+ { id: "bastion-warrior", en: "Bastion Warrior", fr: "Guerrier bastion", tier: 4, ranged: "Gatling Gun", melee: "Shield", skillSlots: 4, parent: "shield-trooper" },
17+ { id: "full-metal-jaguar", en: "Full Metal Jaguar", fr: "Jaguar cuirassé", tier: 4, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 4, parent: "winged-viper" },
18+ { id: "astral-crusader", en: "Astral Crusader", fr: "Croisé astral", tier: 4, ranged: "Sniper Rifle", melee: "Javelin", skillSlots: 4, parent: "partisan-eagle" },
19+ { id: "mastermind", en: "Mastermind", fr: "Manipulateur", tier: 4, ranged: "Raygun", melee: "Knife", skillSlots: 4, parent: "psycorruptor" },
20+ { id: "galactic-knight", en: "Galactic Knight", fr: "Chevalier galactique", tier: 4, ranged: "Psycho Launchers", melee: "Photon Saber", skillSlots: 4, parent: "blast-fencer" },
21+];
22+
new file mode 100644
@@ -0,0 +1,22 @@
1+import type { ClassEntry } from "@/src/lib/types";
2+
3+/** XCX:DE class tree; factual skill-slot caps come from canonical class data. */
4+export const classes: ClassEntry[] = [
5+ { id: "drifter", en: "Drifter", fr: "Aventurier", tier: 1, ranged: "Assault Rifle", melee: "Knife", skillSlots: 5 },
6+ { id: "striker", en: "Striker", fr: "Frappeur", tier: 2, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 1, parent: "drifter" },
7+ { id: "commando", en: "Commando", fr: "Commando", tier: 2, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 2, parent: "drifter" },
8+ { id: "enforcer", en: "Enforcer", fr: "Exécuteur", tier: 2, ranged: "Raygun", melee: "Knife", skillSlots: 2, parent: "drifter" },
9+ { id: "samurai-gunner", en: "Samurai Gunner", fr: "Artilleur samouraï", tier: 3, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 2, parent: "striker" },
10+ { id: "shield-trooper", en: "Shield Trooper", fr: "Soldat bouclier", tier: 3, ranged: "Gatling Gun", melee: "Shield", skillSlots: 3, parent: "striker" },
11+ { id: "winged-viper", en: "Winged Viper", fr: "Vipère ailée", tier: 3, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 3, parent: "commando" },
12+ { id: "partisan-eagle", en: "Partisan Eagle", fr: "Aigle partisan", tier: 3, ranged: "Sniper Rifle", melee: "Javelin", skillSlots: 3, parent: "commando" },
13+ { id: "psycorruptor", en: "Psycorruptor", fr: "Psycorrupteur", tier: 3, ranged: "Raygun", melee: "Knife", skillSlots: 3, parent: "enforcer" },
14+ { id: "blast-fencer", en: "Blast Fencer", fr: "Escrimeur explosif", tier: 3, ranged: "Psycho Launchers", melee: "Photon Saber", skillSlots: 3, parent: "enforcer" },
15+ { id: "duelist", en: "Duelist", fr: "Duelliste", tier: 4, ranged: "Assault Rifle", melee: "Longsword", skillSlots: 3, parent: "samurai-gunner" },
16+ { id: "bastion-warrior", en: "Bastion Warrior", fr: "Guerrier bastion", tier: 4, ranged: "Gatling Gun", melee: "Shield", skillSlots: 4, parent: "shield-trooper" },
17+ { id: "full-metal-jaguar", en: "Full Metal Jaguar", fr: "Jaguar cuirassé", tier: 4, ranged: "Dual Guns", melee: "Dual Swords", skillSlots: 4, parent: "winged-viper" },
18+ { id: "astral-crusader", en: "Astral Crusader", fr: "Croisé astral", tier: 4, ranged: "Sniper Rifle", melee: "Javelin", skillSlots: 4, parent: "partisan-eagle" },
19+ { id: "mastermind", en: "Mastermind", fr: "Manipulateur", tier: 4, ranged: "Raygun", melee: "Knife", skillSlots: 4, parent: "psycorruptor" },
20+ { id: "galactic-knight", en: "Galactic Knight", fr: "Chevalier galactique", tier: 4, ranged: "Psycho Launchers", melee: "Photon Saber", skillSlots: 4, parent: "blast-fencer" },
21+];
22+
added src/data/companions.ts +2697 -0
new file mode 100644
@@ -0,0 +1,2697 @@
1+import type { CompanionFact } from "@/src/lib/types";
2+
3+/** Canonical personal kits plus explicitly heuristic strategy metadata. */
4+export const companions: readonly CompanionFact[] = [
5+ {
6+ "name": "Elma",
7+ "className": "Full Metal Jaguar",
8+ "ranged": "Dual Guns",
9+ "melee": "Dual Swords",
10+ "startLevel": 5,
11+ "startRank": 3,
12+ "maxRank": 20,
13+ "skillSlots": 4,
14+ "defaultArts": [
15+ "Shadowstrike",
16+ "Stream Edge",
17+ "Upper Hand",
18+ "Sliding Slinger"
19+ ],
20+ "arts": [
21+ {
22+ "name": "Shadowstrike",
23+ "rank": 1
24+ },
25+ {
26+ "name": "Sliding Slinger",
27+ "rank": 1
28+ },
29+ {
30+ "name": "Stream Edge",
31+ "rank": 2
32+ },
33+ {
34+ "name": "Upper Hand",
35+ "rank": 3
36+ },
37+ {
38+ "name": "Early Bird",
39+ "rank": 4
40+ },
41+ {
42+ "name": "Side Slash",
43+ "rank": 5
44+ },
45+ {
46+ "name": "Shadowrunner",
47+ "rank": 6
48+ },
49+ {
50+ "name": "Primer",
51+ "rank": 7
52+ },
53+ {
54+ "name": "Thirsty Edge",
55+ "rank": 8
56+ },
57+ {
58+ "name": "Violent Streak",
59+ "rank": 9
60+ },
61+ {
62+ "name": "Killing Machine",
63+ "rank": 10
64+ },
65+ {
66+ "name": "Blood Sacrifice",
67+ "rank": 11
68+ },
69+ {
70+ "name": "Electric Surge",
71+ "rank": 12
72+ },
73+ {
74+ "name": "Ghost Factory",
75+ "rank": 13
76+ },
77+ {
78+ "name": "Executioner",
79+ "rank": 14
80+ },
81+ {
82+ "name": "Hundred Shells",
83+ "rank": 15
84+ }
85+ ],
86+ "skills": [
87+ {
88+ "name": "Agile Gunslinger",
89+ "rank": 7
90+ },
91+ {
92+ "name": "Steady Hand",
93+ "rank": 9
94+ },
95+ {
96+ "name": "Background Noise",
97+ "rank": 11
98+ },
99+ {
100+ "name": "Master Edge",
101+ "rank": 13
102+ },
103+ {
104+ "name": "Mortal Enemy",
105+ "rank": 15
106+ },
107+ {
108+ "name": "Hellhound",
109+ "rank": 16
110+ },
111+ {
112+ "name": "Crisis Catalyst",
113+ "rank": 17
114+ },
115+ {
116+ "name": "Phantom Counter",
117+ "rank": 18
118+ }
119+ ],
120+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Elma%2FGameplay%20%28XCX%29&prop=wikitext%7Ctext&format=json",
121+ "strategy": "jaguar",
122+ "capabilities": {
123+ "tank": 1,
124+ "support": 0,
125+ "damage": 3,
126+ "control": 1
127+ }
128+ },
129+ {
130+ "name": "Lin",
131+ "className": "Shield Trooper",
132+ "ranged": "Gatling Gun",
133+ "melee": "Shield",
134+ "startLevel": 5,
135+ "startRank": 3,
136+ "maxRank": 20,
137+ "skillSlots": 3,
138+ "defaultArts": [
139+ "Wild Down",
140+ "Wild Smash",
141+ "Flame Cloak",
142+ "Fire Carnival"
143+ ],
144+ "arts": [
145+ {
146+ "name": "Wild Down",
147+ "rank": 1
148+ },
149+ {
150+ "name": "Fire Carnival",
151+ "rank": 1
152+ },
153+ {
154+ "name": "Wild Smash",
155+ "rank": 2
156+ },
157+ {
158+ "name": "Flame Cloak",
159+ "rank": 3
160+ },
161+ {
162+ "name": "Trash Talk",
163+ "rank": 4
164+ },
165+ {
166+ "name": "Thermal Payload",
167+ "rank": 5
168+ },
169+ {
170+ "name": "Iron Prison",
171+ "rank": 6
172+ },
173+ {
174+ "name": "Bombardier",
175+ "rank": 7
176+ },
177+ {
178+ "name": "Bullet Storm",
179+ "rank": 8
180+ },
181+ {
182+ "name": "Supershield",
183+ "rank": 9
184+ },
185+ {
186+ "name": "Reality Rift",
187+ "rank": 10
188+ },
189+ {
190+ "name": "Enhanced Stand",
191+ "rank": 11
192+ },
193+ {
194+ "name": "Shield Wall",
195+ "rank": 12
196+ },
197+ {
198+ "name": "Hellfire",
199+ "rank": 13
200+ },
201+ {
202+ "name": "Drum Roll",
203+ "rank": 14
204+ },
205+ {
206+ "name": "Cool Off",
207+ "rank": 15
208+ }
209+ ],
210+ "skills": [
211+ {
212+ "name": "Steel Flesh",
213+ "rank": 7
214+ },
215+ {
216+ "name": "Mighty Muscle",
217+ "rank": 9
218+ },
219+ {
220+ "name": "Dismantler",
221+ "rank": 11
222+ },
223+ {
224+ "name": "Shield Screen",
225+ "rank": 13
226+ },
227+ {
228+ "name": "Long Topple",
229+ "rank": 15
230+ },
231+ {
232+ "name": "Dirty Fighter",
233+ "rank": 16
234+ },
235+ {
236+ "name": "Stand Strong",
237+ "rank": 17
238+ },
239+ {
240+ "name": "Machine Gunner",
241+ "rank": 18
242+ }
243+ ],
244+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Lin%2FGameplay&prop=wikitext%7Ctext&format=json",
245+ "strategy": "bastion",
246+ "capabilities": {
247+ "tank": 3,
248+ "support": 1,
249+ "damage": 1,
250+ "control": 3
251+ }
252+ },
253+ {
254+ "name": "Irina",
255+ "className": "Psycorruptor+",
256+ "ranged": "Assault Rifle",
257+ "melee": "Knife",
258+ "startLevel": 14,
259+ "startRank": 3,
260+ "maxRank": 20,
261+ "skillSlots": 4,
262+ "defaultArts": [
263+ "Repair",
264+ "Full Specs",
265+ "Furious Blast",
266+ "Burst Grenade"
267+ ],
268+ "arts": [
269+ {
270+ "name": "Repair",
271+ "rank": 1
272+ },
273+ {
274+ "name": "Burst Grenade",
275+ "rank": 1
276+ },
277+ {
278+ "name": "Full Specs",
279+ "rank": 2
280+ },
281+ {
282+ "name": "Furious Blast",
283+ "rank": 3
284+ },
285+ {
286+ "name": "Screamer",
287+ "rank": 4
288+ },
289+ {
290+ "name": "Smooth Recovery",
291+ "rank": 5
292+ },
293+ {
294+ "name": "Dispel",
295+ "rank": 6
296+ },
297+ {
298+ "name": "Flash Grenade",
299+ "rank": 7
300+ },
301+ {
302+ "name": "Brainjack",
303+ "rank": 8
304+ },
305+ {
306+ "name": "Medic Free",
307+ "rank": 9
308+ },
309+ {
310+ "name": "Quick Cannon",
311+ "rank": 10
312+ },
313+ {
314+ "name": "Absorber Skin",
315+ "rank": 11
316+ },
317+ {
318+ "name": "Assault Hammer",
319+ "rank": 12
320+ },
321+ {
322+ "name": "Servant Sacrifice",
323+ "rank": 13
324+ },
325+ {
326+ "name": "Energy Source",
327+ "rank": 14
328+ },
329+ {
330+ "name": "Last Stand",
331+ "rank": 15
332+ }
333+ ],
334+ "skills": [
335+ {
336+ "name": "Inner Search",
337+ "rank": 7
338+ },
339+ {
340+ "name": "Feather Touch",
341+ "rank": 9
342+ },
343+ {
344+ "name": "Healing Touch",
345+ "rank": 11
346+ },
347+ {
348+ "name": "High Tension",
349+ "rank": 13
350+ },
351+ {
352+ "name": "Beauty Sleep",
353+ "rank": 15
354+ },
355+ {
356+ "name": "King's Decree",
357+ "rank": 16
358+ },
359+ {
360+ "name": "Unpleasant Dream",
361+ "rank": 17
362+ },
363+ {
364+ "name": "King's Boon",
365+ "rank": 18
366+ }
367+ ],
368+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Irina%2FGameplay&prop=wikitext%7Ctext&format=json",
369+ "strategy": "mastermind",
370+ "capabilities": {
371+ "tank": 0,
372+ "support": 3,
373+ "damage": 1,
374+ "control": 2
375+ }
376+ },
377+ {
378+ "name": "Gwin",
379+ "className": "Samurai Gunner",
380+ "ranged": "Assault Rifle",
381+ "melee": "Longsword",
382+ "startLevel": 12,
383+ "startRank": 3,
384+ "maxRank": 20,
385+ "skillSlots": 3,
386+ "defaultArts": [
387+ "Rising Blade",
388+ "Defensive Stance",
389+ "Power Dive",
390+ "Furious Blast"
391+ ],
392+ "arts": [
393+ {
394+ "name": "Rising Blade",
395+ "rank": 1
396+ },
397+ {
398+ "name": "Furious Blast",
399+ "rank": 1
400+ },
401+ {
402+ "name": "Power Dive",
403+ "rank": 2
404+ },
405+ {
406+ "name": "Defensive Stance",
407+ "rank": 3
408+ },
409+ {
410+ "name": "Magnum Edge",
411+ "rank": 4
412+ },
413+ {
414+ "name": "Ultraslash",
415+ "rank": 5
416+ },
417+ {
418+ "name": "Burst Grenade",
419+ "rank": 6
420+ },
421+ {
422+ "name": "Offensive Stance",
423+ "rank": 7
424+ },
425+ {
426+ "name": "Decoy Round",
427+ "rank": 8
428+ },
429+ {
430+ "name": "Tornado Blade",
431+ "rank": 9
432+ },
433+ {
434+ "name": "Medic Free",
435+ "rank": 10
436+ },
437+ {
438+ "name": "Flash Grenade",
439+ "rank": 11
440+ },
441+ {
442+ "name": "Incendiary Edge",
443+ "rank": 12
444+ },
445+ {
446+ "name": "Grenade Blitz",
447+ "rank": 13
448+ },
449+ {
450+ "name": "Gunforce",
451+ "rank": 14
452+ },
453+ {
454+ "name": "Takedown Shot",
455+ "rank": 15
456+ }
457+ ],
458+ "skills": [
459+ {
460+ "name": "Unwavering Courage",
461+ "rank": 7
462+ },
463+ {
464+ "name": "Flame Trigger",
465+ "rank": 9
466+ },
467+ {
468+ "name": "Mighty Muscle",
469+ "rank": 11
470+ },
471+ {
472+ "name": "Auto Melee Boost",
473+ "rank": 13
474+ },
475+ {
476+ "name": "Healing Aura",
477+ "rank": 15
478+ },
479+ {
480+ "name": "Weapon Guard",
481+ "rank": 16
482+ },
483+ {
484+ "name": "Theroid Slayer",
485+ "rank": 17
486+ },
487+ {
488+ "name": "Conflagrant Edge",
489+ "rank": 18
490+ }
491+ ],
492+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Gwin%2FGameplay&prop=wikitext%7Ctext&format=json",
493+ "strategy": "duelist",
494+ "capabilities": {
495+ "tank": 1,
496+ "support": 0,
497+ "damage": 3,
498+ "control": 1
499+ }
500+ },
501+ {
502+ "name": "Doug",
503+ "className": "Blast Fencer+",
504+ "ranged": "Raygun",
505+ "melee": "Photon Saber",
506+ "startLevel": 18,
507+ "startRank": 3,
508+ "maxRank": 20,
509+ "skillSlots": 4,
510+ "defaultArts": [
511+ "Starfall Blade",
512+ "Starfall Rondo",
513+ "Geolibrium",
514+ "Beam Barrage"
515+ ],
516+ "arts": [
517+ {
518+ "name": "Starfall Blade",
519+ "rank": 1
520+ },
521+ {
522+ "name": "Beam Barrage",
523+ "rank": 1
524+ },
525+ {
526+ "name": "Starfall Rondo",
527+ "rank": 2
528+ },
529+ {
530+ "name": "Geolibrium",
531+ "rank": 3
532+ },
533+ {
534+ "name": "Myopic Screen",
535+ "rank": 4
536+ },
537+ {
538+ "name": "Starlight Duster",
539+ "rank": 5
540+ },
541+ {
542+ "name": "Astral Purge",
543+ "rank": 6
544+ },
545+ {
546+ "name": "Ether Blast",
547+ "rank": 7
548+ },
549+ {
550+ "name": "Novalibrium",
551+ "rank": 8
552+ },
553+ {
554+ "name": "Astral Heal",
555+ "rank": 9
556+ },
557+ {
558+ "name": "Subterfuge",
559+ "rank": 10
560+ },
561+ {
562+ "name": "Gravity Blast",
563+ "rank": 11
564+ },
565+ {
566+ "name": "Astral Horizon",
567+ "rank": 12
568+ },
569+ {
570+ "name": "Phenomenon",
571+ "rank": 13
572+ },
573+ {
574+ "name": "Pathogen Blast",
575+ "rank": 14
576+ },
577+ {
578+ "name": "Galactic Cataclysm",
579+ "rank": 15
580+ }
581+ ],
582+ "skills": [
583+ {
584+ "name": "Inner Search",
585+ "rank": 7
586+ },
587+ {
588+ "name": "Beam Boost",
589+ "rank": 9
590+ },
591+ {
592+ "name": "High Tension",
593+ "rank": 11
594+ },
595+ {
596+ "name": "Mechanoid Slayer",
597+ "rank": 13
598+ },
599+ {
600+ "name": "Knight's Soul",
601+ "rank": 15
602+ },
603+ {
604+ "name": "Aura Assault",
605+ "rank": 16
606+ },
607+ {
608+ "name": "Supreme Sword",
609+ "rank": 17
610+ },
611+ {
612+ "name": "Stellar Entry",
613+ "rank": 18
614+ }
615+ ],
616+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Doug%2FGameplay&prop=wikitext%7Ctext&format=json",
617+ "strategy": "galactic",
618+ "capabilities": {
619+ "tank": 1,
620+ "support": 1,
621+ "damage": 3,
622+ "control": 1
623+ }
624+ },
625+ {
626+ "name": "Lao",
627+ "className": "Partisan Eagle",
628+ "ranged": "Sniper Rifle",
629+ "melee": "Javelin",
630+ "startLevel": 15,
631+ "startRank": 3,
632+ "maxRank": 20,
633+ "skillSlots": 3,
634+ "defaultArts": [
635+ "Balance Breaker",
636+ "Arcing Horn",
637+ "First Down",
638+ "Shrapnel"
639+ ],
640+ "arts": [
641+ {
642+ "name": "Balance Breaker",
643+ "rank": 1
644+ },
645+ {
646+ "name": "Shrapnel",
647+ "rank": 1
648+ },
649+ {
650+ "name": "First Down",
651+ "rank": 2
652+ },
653+ {
654+ "name": "Arcing Horn",
655+ "rank": 3
656+ },
657+ {
658+ "name": "Eagle Eye",
659+ "rank": 4
660+ },
661+ {
662+ "name": "Raijin",
663+ "rank": 5
664+ },
665+ {
666+ "name": "Spiral Horn",
667+ "rank": 6
668+ },
669+ {
670+ "name": "Sidewinder",
671+ "rank": 7
672+ },
673+ {
674+ "name": "Overwhelm",
675+ "rank": 8
676+ },
677+ {
678+ "name": "Hawkeye",
679+ "rank": 9
680+ },
681+ {
682+ "name": "Speed Demon",
683+ "rank": 10
684+ },
685+ {
686+ "name": "Trident Buster",
687+ "rank": 11
688+ },
689+ {
690+ "name": "Intercept",
691+ "rank": 12
692+ },
693+ {
694+ "name": "Hair Trigger",
695+ "rank": 13
696+ },
697+ {
698+ "name": "Afterburner",
699+ "rank": 14
700+ },
701+ {
702+ "name": "Ghost Sniper",
703+ "rank": 15
704+ }
705+ ],
706+ "skills": [
707+ {
708+ "name": "Killshot",
709+ "rank": 7
710+ },
711+ {
712+ "name": "Electric Boost",
713+ "rank": 9
714+ },
715+ {
716+ "name": "Knock 'n' Shock",
717+ "rank": 11
718+ },
719+ {
720+ "name": "Piscinoid Slayer",
721+ "rank": 13
722+ },
723+ {
724+ "name": "Long Shot",
725+ "rank": 15
726+ },
727+ {
728+ "name": "Quick Reload",
729+ "rank": 16
730+ },
731+ {
732+ "name": "Conductive Strike",
733+ "rank": 17
734+ },
735+ {
736+ "name": "TP Overdrive",
737+ "rank": 18
738+ }
739+ ],
740+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Lao%2FGameplay&prop=wikitext%7Ctext&format=json",
741+ "strategy": "astral",
742+ "capabilities": {
743+ "tank": 0,
744+ "support": 1,
745+ "damage": 3,
746+ "control": 2
747+ }
748+ },
749+ {
750+ "name": "L",
751+ "className": "Shield Trooper+",
752+ "ranged": "Psycho Launchers",
753+ "melee": "Shield",
754+ "startLevel": 13,
755+ "startRank": 3,
756+ "maxRank": 20,
757+ "skillSlots": 3,
758+ "defaultArts": [
759+ "Wild Down",
760+ "Iron Prison",
761+ "Lightning Cloak",
762+ "Stellar Ray"
763+ ],
764+ "arts": [
765+ {
766+ "name": "Wild Down",
767+ "rank": 1
768+ },
769+ {
770+ "name": "Stellar Ray",
771+ "rank": 1
772+ },
773+ {
774+ "name": "Lightning Cloak",
775+ "rank": 2
776+ },
777+ {
778+ "name": "Iron Prison",
779+ "rank": 3
780+ },
781+ {
782+ "name": "Wild Smash",
783+ "rank": 4
784+ },
785+ {
786+ "name": "Mindstorm",
787+ "rank": 5
788+ },
789+ {
790+ "name": "Trash Talk",
791+ "rank": 6
792+ },
793+ {
794+ "name": "Shooting Star",
795+ "rank": 7
796+ },
797+ {
798+ "name": "Reality Rift",
799+ "rank": 8
800+ },
801+ {
802+ "name": "Shield Wall",
803+ "rank": 9
804+ },
805+ {
806+ "name": "Dual Dynamo",
807+ "rank": 10
808+ },
809+ {
810+ "name": "Bombardier",
811+ "rank": 11
812+ },
813+ {
814+ "name": "Flame Cloak",
815+ "rank": 12
816+ },
817+ {
818+ "name": "Astral Protection",
819+ "rank": 13
820+ },
821+ {
822+ "name": "Supershield",
823+ "rank": 14
824+ },
825+ {
826+ "name": "Starlight Kick",
827+ "rank": 15
828+ }
829+ ],
830+ "skills": [
831+ {
832+ "name": "Steel Flesh",
833+ "rank": 7
834+ },
835+ {
836+ "name": "Mighty Muscle",
837+ "rank": 9
838+ },
839+ {
840+ "name": "Shield Screen",
841+ "rank": 11
842+ },
843+ {
844+ "name": "Long Topple",
845+ "rank": 13
846+ },
847+ {
848+ "name": "Stand Strong",
849+ "rank": 15
850+ },
851+ {
852+ "name": "Mechanoid Slayer",
853+ "rank": 16
854+ },
855+ {
856+ "name": "Knight's Soul",
857+ "rank": 17
858+ },
859+ {
860+ "name": "Double Reflect",
861+ "rank": 18
862+ }
863+ ],
864+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=L%2FGameplay&prop=text&format=json",
865+ "strategy": "bastion",
866+ "capabilities": {
867+ "tank": 2,
868+ "support": 1,
869+ "damage": 1,
870+ "control": 3
871+ }
872+ },
873+ {
874+ "name": "H.B.",
875+ "className": "Shield Trooper+",
876+ "ranged": "Assault Rifle",
877+ "melee": "Shield",
878+ "startLevel": 12,
879+ "startRank": 3,
880+ "maxRank": 20,
881+ "skillSlots": 4,
882+ "defaultArts": [
883+ "Atomic Hit",
884+ "Power Dive",
885+ "Burst Grenade",
886+ "Decoy Round"
887+ ],
888+ "arts": [
889+ {
890+ "name": "Atomic Hit",
891+ "rank": 1
892+ },
893+ {
894+ "name": "Decoy Round",
895+ "rank": 1
896+ },
897+ {
898+ "name": "Burst Grenade",
899+ "rank": 2
900+ },
901+ {
902+ "name": "Power Dive",
903+ "rank": 3
904+ },
905+ {
906+ "name": "Iron Prison",
907+ "rank": 4
908+ },
909+ {
910+ "name": "Wild Smash",
911+ "rank": 5
912+ },
913+ {
914+ "name": "Furious Blast",
915+ "rank": 6
916+ },
917+ {
918+ "name": "Wild Down",
919+ "rank": 7
920+ },
921+ {
922+ "name": "Flash Grenade",
923+ "rank": 8
924+ },
925+ {
926+ "name": "Shield Wall",
927+ "rank": 9
928+ },
929+ {
930+ "name": "Flamehand",
931+ "rank": 10
932+ },
933+ {
934+ "name": "Takedown Shot",
935+ "rank": 11
936+ },
937+ {
938+ "name": "Trash Talk",
939+ "rank": 12
940+ },
941+ {
942+ "name": "Bombardier",
943+ "rank": 13
944+ },
945+ {
946+ "name": "Gunforce",
947+ "rank": 14
948+ },
949+ {
950+ "name": "Last Stand",
951+ "rank": 15
952+ }
953+ ],
954+ "skills": [
955+ {
956+ "name": "Steel Flesh",
957+ "rank": 7
958+ },
959+ {
960+ "name": "Mighty Muscle",
961+ "rank": 9
962+ },
963+ {
964+ "name": "Combat Presence",
965+ "rank": 11
966+ },
967+ {
968+ "name": "Topple Topper",
969+ "rank": 13
970+ },
971+ {
972+ "name": "Shield Screen",
973+ "rank": 14
974+ },
975+ {
976+ "name": "Long Topple",
977+ "rank": 15
978+ },
979+ {
980+ "name": "Trauma Tension",
981+ "rank": 16
982+ },
983+ {
984+ "name": "Double Spike",
985+ "rank": 17
986+ }
987+ ],
988+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=H.B.%2FGameplay&prop=text&format=json",
989+ "strategy": "bastion",
990+ "capabilities": {
991+ "tank": 3,
992+ "support": 2,
993+ "damage": 1,
994+ "control": 2
995+ }
996+ },
997+ {
998+ "name": "Alexa",
999+ "className": "Partisan Eagle+",
1000+ "ranged": "Assault Rifle",
1001+ "melee": "Javelin",
1002+ "startLevel": 17,
1003+ "startRank": 3,
1004+ "maxRank": 20,
1005+ "skillSlots": 3,
1006+ "defaultArts": [
1007+ "Arcing Horn",
1008+ "Spiral Horn",
1009+ "Power Dive",
1010+ "Furious Blast"
1011+ ],
1012+ "arts": [
1013+ {
1014+ "name": "Arcing Horn",
1015+ "rank": 1
1016+ },
1017+ {
1018+ "name": "Furious Blast",
1019+ "rank": 1
1020+ },
1021+ {
1022+ "name": "Spiral Horn",
1023+ "rank": 2
1024+ },
1025+ {
1026+ "name": "Power Dive",
1027+ "rank": 3
1028+ },
1029+ {
1030+ "name": "Overclock",
1031+ "rank": 4
1032+ },
1033+ {
1034+ "name": "Overwhelm",
1035+ "rank": 5
1036+ },
1037+ {
1038+ "name": "Burst Grenade",
1039+ "rank": 6
1040+ },
1041+ {
1042+ "name": "Decoy Round",
1043+ "rank": 7
1044+ },
1045+ {
1046+ "name": "Assault Hammer",
1047+ "rank": 8
1048+ },
1049+ {
1050+ "name": "Medic Free",
1051+ "rank": 9
1052+ },
1053+ {
1054+ "name": "Hair Trigger",
1055+ "rank": 10
1056+ },
1057+ {
1058+ "name": "Maximum Voltage",
1059+ "rank": 11
1060+ },
1061+ {
1062+ "name": "Raijin",
1063+ "rank": 12
1064+ },
1065+ {
1066+ "name": "Flash Grenade",
1067+ "rank": 13
1068+ },
1069+ {
1070+ "name": "Trident Buster",
1071+ "rank": 14
1072+ },
1073+ {
1074+ "name": "Gunforce",
1075+ "rank": 15
1076+ }
1077+ ],
1078+ "skills": [
1079+ {
1080+ "name": "Steel Flesh",
1081+ "rank": 7
1082+ },
1083+ {
1084+ "name": "High Tension",
1085+ "rank": 9
1086+ },
1087+ {
1088+ "name": "Electric Boost",
1089+ "rank": 11
1090+ },
1091+ {
1092+ "name": "Quick Reload",
1093+ "rank": 13
1094+ },
1095+ {
1096+ "name": "Fortified Flesh",
1097+ "rank": 14
1098+ },
1099+ {
1100+ "name": "TP Overdrive",
1101+ "rank": 15
1102+ },
1103+ {
1104+ "name": "Stellar Entry",
1105+ "rank": 16
1106+ },
1107+ {
1108+ "name": "Synchrony",
1109+ "rank": 17
1110+ }
1111+ ],
1112+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Alexa%2FGameplay&prop=text&format=json",
1113+ "strategy": "astral",
1114+ "capabilities": {
1115+ "tank": 0,
1116+ "support": 1,
1117+ "damage": 3,
1118+ "control": 2
1119+ }
1120+ },
1121+ {
1122+ "name": "Bozé",
1123+ "className": "Partisan Eagle",
1124+ "ranged": "Sniper Rifle",
1125+ "melee": "Javelin",
1126+ "startLevel": 20,
1127+ "startRank": 3,
1128+ "maxRank": 20,
1129+ "skillSlots": 3,
1130+ "defaultArts": [
1131+ "Spiral Horn",
1132+ "Arcing Horn",
1133+ "Eagle Eye",
1134+ "Shrapnel"
1135+ ],
1136+ "arts": [
1137+ {
1138+ "name": "Spiral Horn",
1139+ "rank": 1
1140+ },
1141+ {
1142+ "name": "Shrapnel",
1143+ "rank": 1
1144+ },
1145+ {
1146+ "name": "Arcing Horn",
1147+ "rank": 2
1148+ },
1149+ {
1150+ "name": "Eagle Eye",
1151+ "rank": 3
1152+ },
1153+ {
1154+ "name": "Raijin",
1155+ "rank": 4
1156+ },
1157+ {
1158+ "name": "Vortex",
1159+ "rank": 5
1160+ },
1161+ {
1162+ "name": "First Down",
1163+ "rank": 6
1164+ },
1165+ {
1166+ "name": "Overwhelm",
1167+ "rank": 7
1168+ },
1169+ {
1170+ "name": "Hair Trigger",
1171+ "rank": 8
1172+ },
1173+ {
1174+ "name": "Sidewinder",
1175+ "rank": 9
1176+ },
1177+ {
1178+ "name": "Ghost Sniper",
1179+ "rank": 10
1180+ },
1181+ {
1182+ "name": "Slayonet",
1183+ "rank": 11
1184+ },
1185+ {
1186+ "name": "Hawkeye",
1187+ "rank": 12
1188+ },
1189+ {
1190+ "name": "Speed Demon",
1191+ "rank": 13
1192+ },
1193+ {
1194+ "name": "Intercept",
1195+ "rank": 14
1196+ },
1197+ {
1198+ "name": "Trident Buster",
1199+ "rank": 15
1200+ }
1201+ ],
1202+ "skills": [
1203+ {
1204+ "name": "Master Edge",
1205+ "rank": 7
1206+ },
1207+ {
1208+ "name": "Killshot",
1209+ "rank": 9
1210+ },
1211+ {
1212+ "name": "Electric Guard",
1213+ "rank": 11
1214+ },
1215+ {
1216+ "name": "Electric Boost",
1217+ "rank": 13
1218+ },
1219+ {
1220+ "name": "Knock 'n' Shock",
1221+ "rank": 14
1222+ },
1223+ {
1224+ "name": "Quick Reload",
1225+ "rank": 15
1226+ },
1227+ {
1228+ "name": "Conductive Strike",
1229+ "rank": 16
1230+ },
1231+ {
1232+ "name": "TP Overdrive",
1233+ "rank": 17
1234+ }
1235+ ],
1236+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Boz%C3%A9%2FGameplay&prop=text&format=json",
1237+ "strategy": "astral",
1238+ "capabilities": {
1239+ "tank": 0,
1240+ "support": 0,
1241+ "damage": 3,
1242+ "control": 2
1243+ }
1244+ },
1245+ {
1246+ "name": "Celica",
1247+ "className": "Psycorruptor+",
1248+ "ranged": "Dual Guns",
1249+ "melee": "Knife",
1250+ "startLevel": 32,
1251+ "startRank": 3,
1252+ "maxRank": 20,
1253+ "skillSlots": 3,
1254+ "defaultArts": [
1255+ "Absorber Skin",
1256+ "Black Bane",
1257+ "Full Specs",
1258+ "Sliding Slinger"
1259+ ],
1260+ "arts": [
1261+ {
1262+ "name": "Absorber Skin",
1263+ "rank": 1
1264+ },
1265+ {
1266+ "name": "Sliding Slinger",
1267+ "rank": 1
1268+ },
1269+ {
1270+ "name": "Black Bane",
1271+ "rank": 2
1272+ },
1273+ {
1274+ "name": "Full Specs",
1275+ "rank": 3
1276+ },
1277+ {
1278+ "name": "Screamer",
1279+ "rank": 4
1280+ },
1281+ {
1282+ "name": "Primer",
1283+ "rank": 5
1284+ },
1285+ {
1286+ "name": "Violent Streak",
1287+ "rank": 6
1288+ },
1289+ {
1290+ "name": "Dispel",
1291+ "rank": 7
1292+ },
1293+ {
1294+ "name": "Early Bird",
1295+ "rank": 8
1296+ },
1297+ {
1298+ "name": "Energy Source",
1299+ "rank": 9
1300+ },
1301+ {
1302+ "name": "Zero Zero",
1303+ "rank": 10
1304+ },
1305+ {
1306+ "name": "Ghostwalker",
1307+ "rank": 11
1308+ },
1309+ {
1310+ "name": "Repair",
1311+ "rank": 12
1312+ },
1313+ {
1314+ "name": "Executioner",
1315+ "rank": 13
1316+ },
1317+ {
1318+ "name": "Combat Limbo",
1319+ "rank": 14
1320+ },
1321+ {
1322+ "name": "Black Butterfly",
1323+ "rank": 15
1324+ }
1325+ ],
1326+ "skills": [
1327+ {
1328+ "name": "Steady Hand",
1329+ "rank": 7
1330+ },
1331+ {
1332+ "name": "Inner Search",
1333+ "rank": 9
1334+ },
1335+ {
1336+ "name": "Aura Burst",
1337+ "rank": 11
1338+ },
1339+ {
1340+ "name": "Fleet Feet",
1341+ "rank": 13
1342+ },
1343+ {
1344+ "name": "Gentle Approach",
1345+ "rank": 15
1346+ },
1347+ {
1348+ "name": "Mindscape",
1349+ "rank": 16
1350+ },
1351+ {
1352+ "name": "Feather Touch",
1353+ "rank": 17
1354+ },
1355+ {
1356+ "name": "Red Zone",
1357+ "rank": 18
1358+ }
1359+ ],
1360+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Celica%2FGameplay&prop=wikitext%7Ctext&format=json",
1361+ "strategy": "mastermind",
1362+ "capabilities": {
1363+ "tank": 0,
1364+ "support": 3,
1365+ "damage": 1,
1366+ "control": 2
1367+ }
1368+ },
1369+ {
1370+ "name": "Frye",
1371+ "className": "Samurai Gunner+",
1372+ "ranged": "Gatling Gun",
1373+ "melee": "Longsword",
1374+ "startLevel": 16,
1375+ "startRank": 3,
1376+ "maxRank": 20,
1377+ "skillSlots": 3,
1378+ "defaultArts": [
1379+ "Rising Blade",
1380+ "Tornado Blade",
1381+ "Enhanced Stand",
1382+ "Missile Volley"
1383+ ],
1384+ "arts": [
1385+ {
1386+ "name": "Rising Blade",
1387+ "rank": 1
1388+ },
1389+ {
1390+ "name": "Missile Volley",
1391+ "rank": 1
1392+ },
1393+ {
1394+ "name": "Tornado Blade",
1395+ "rank": 2
1396+ },
1397+ {
1398+ "name": "Enhanced Stand",
1399+ "rank": 3
1400+ },
1401+ {
1402+ "name": "Bullet Twister",
1403+ "rank": 4
1404+ },
1405+ {
1406+ "name": "Burning Slash",
1407+ "rank": 5
1408+ },
1409+ {
1410+ "name": "Offensive Stance",
1411+ "rank": 6
1412+ },
1413+ {
1414+ "name": "Bullet Storm",
1415+ "rank": 7
1416+ },
1417+ {
1418+ "name": "Cool Off",
1419+ "rank": 8
1420+ },
1421+ {
1422+ "name": "Incendiary Edge",
1423+ "rank": 9
1424+ },
1425+ {
1426+ "name": "Titan Recharge",
1427+ "rank": 10
1428+ },
1429+ {
1430+ "name": "Thermal Payload",
1431+ "rank": 11
1432+ },
1433+ {
1434+ "name": "Defensive Stance",
1435+ "rank": 12
1436+ },
1437+ {
1438+ "name": "Hellfire",
1439+ "rank": 13
1440+ }
1441+ ],
1442+ "skills": [
1443+ {
1444+ "name": "Unwavering Courage",
1445+ "rank": 7
1446+ },
1447+ {
1448+ "name": "Mighty Muscle",
1449+ "rank": 9
1450+ },
1451+ {
1452+ "name": "Iron Knuckle",
1453+ "rank": 11
1454+ },
1455+ {
1456+ "name": "Rising Renewal",
1457+ "rank": 13
1458+ },
1459+ {
1460+ "name": "Weapon Guard",
1461+ "rank": 14
1462+ },
1463+ {
1464+ "name": "Trauma Tension",
1465+ "rank": 15
1466+ },
1467+ {
1468+ "name": "Blazing Auto",
1469+ "rank": 16
1470+ },
1471+ {
1472+ "name": "Machine Gunner",
1473+ "rank": 17
1474+ }
1475+ ],
1476+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Frye%2FGameplay&prop=wikitext%7Ctext&format=json",
1477+ "strategy": "duelist",
1478+ "capabilities": {
1479+ "tank": 1,
1480+ "support": 0,
1481+ "damage": 3,
1482+ "control": 1
1483+ }
1484+ },
1485+ {
1486+ "name": "Ga Jiarg",
1487+ "className": "Galactic Knight+",
1488+ "ranged": "Raygun",
1489+ "melee": "Photon Saber",
1490+ "startLevel": 40,
1491+ "startRank": 3,
1492+ "maxRank": 20,
1493+ "skillSlots": 4,
1494+ "defaultArts": [
1495+ "Starfall Blade",
1496+ "Beam Barrage",
1497+ "Sky Sunder",
1498+ "Subterfuge"
1499+ ],
1500+ "arts": [
1501+ {
1502+ "name": "Starfall Blade",
1503+ "rank": 1
1504+ },
1505+ {
1506+ "name": "Beam Barrage",
1507+ "rank": 1
1508+ },
1509+ {
1510+ "name": "Sky Sunder",
1511+ "rank": 2
1512+ },
1513+ {
1514+ "name": "Subterfuge",
1515+ "rank": 3
1516+ },
1517+ {
1518+ "name": "Gravity Cloak",
1519+ "rank": 4
1520+ },
1521+ {
1522+ "name": "Astrolibrium",
1523+ "rank": 5
1524+ },
1525+ {
1526+ "name": "Starfall Rondo",
1527+ "rank": 6
1528+ },
1529+ {
1530+ "name": "Myopic Screen",
1531+ "rank": 7
1532+ },
1533+ {
1534+ "name": "Astral Heal",
1535+ "rank": 8
1536+ },
1537+ {
1538+ "name": "Gravity Blast",
1539+ "rank": 9
1540+ },
1541+ {
1542+ "name": "Novalibrium",
1543+ "rank": 10
1544+ },
1545+ {
1546+ "name": "Ether Blast",
1547+ "rank": 11
1548+ },
1549+ {
1550+ "name": "Starfall Blossom",
1551+ "rank": 12
1552+ },
1553+ {
1554+ "name": "Pathogen Blast",
1555+ "rank": 13
1556+ },
1557+ {
1558+ "name": "Bahamut Wave",
1559+ "rank": 14
1560+ },
1561+ {
1562+ "name": "Galactic Cataclysm",
1563+ "rank": 15
1564+ }
1565+ ],
1566+ "skills": [
1567+ {
1568+ "name": "Inner Search",
1569+ "rank": 7
1570+ },
1571+ {
1572+ "name": "Beam Boost",
1573+ "rank": 9
1574+ },
1575+ {
1576+ "name": "Healing Touch",
1577+ "rank": 11
1578+ },
1579+ {
1580+ "name": "Aura Assault",
1581+ "rank": 13
1582+ },
1583+ {
1584+ "name": "Supreme Sword",
1585+ "rank": 14
1586+ },
1587+ {
1588+ "name": "Appendage Erosion",
1589+ "rank": 15
1590+ },
1591+ {
1592+ "name": "Tactical Analyst",
1593+ "rank": 16
1594+ },
1595+ {
1596+ "name": "Fast Forward",
1597+ "rank": 17
1598+ }
1599+ ],
1600+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Ga%20Jiarg%2FGameplay&prop=wikitext%7Ctext&format=json",
1601+ "strategy": "galactic",
1602+ "capabilities": {
1603+ "tank": 1,
1604+ "support": 1,
1605+ "damage": 3,
1606+ "control": 1
1607+ }
1608+ },
1609+ {
1610+ "name": "Hope",
1611+ "className": "Psycorruptor+",
1612+ "ranged": "Psycho Launchers",
1613+ "melee": "Knife",
1614+ "startLevel": 24,
1615+ "startRank": 3,
1616+ "maxRank": 20,
1617+ "skillSlots": 3,
1618+ "defaultArts": [
1619+ "Repair",
1620+ "Full Specs",
1621+ "Shooting Star",
1622+ "Stellar Ray"
1623+ ],
1624+ "arts": [
1625+ {
1626+ "name": "Repair",
1627+ "rank": 1
1628+ },
1629+ {
1630+ "name": "Stellar Ray",
1631+ "rank": 1
1632+ },
1633+ {
1634+ "name": "Full Specs",
1635+ "rank": 2
1636+ },
1637+ {
1638+ "name": "Shooting Star",
1639+ "rank": 3
1640+ },
1641+ {
1642+ "name": "Absorber Skin",
1643+ "rank": 4
1644+ },
1645+ {
1646+ "name": "Secondary Speed",
1647+ "rank": 5
1648+ },
1649+ {
1650+ "name": "Dispel",
1651+ "rank": 6
1652+ },
1653+ {
1654+ "name": "Brainjack",
1655+ "rank": 7
1656+ },
1657+ {
1658+ "name": "Servant Sacrifice",
1659+ "rank": 8
1660+ },
1661+ {
1662+ "name": "Energy Source",
1663+ "rank": 9
1664+ },
1665+ {
1666+ "name": "Tacit Censure",
1667+ "rank": 10
1668+ },
1669+ {
1670+ "name": "Astral Protection",
1671+ "rank": 11
1672+ },
1673+ {
1674+ "name": "Starlight Kick",
1675+ "rank": 12
1676+ },
1677+ {
1678+ "name": "Black Butterfly",
1679+ "rank": 13
1680+ }
1681+ ],
1682+ "skills": [
1683+ {
1684+ "name": "Inner Search",
1685+ "rank": 7
1686+ },
1687+ {
1688+ "name": "Buff Heal",
1689+ "rank": 9
1690+ },
1691+ {
1692+ "name": "Well-Weathered",
1693+ "rank": 11
1694+ },
1695+ {
1696+ "name": "Mechanoid Slayer",
1697+ "rank": 13
1698+ },
1699+ {
1700+ "name": "King's Decree",
1701+ "rank": 14
1702+ },
1703+ {
1704+ "name": "Knight's Soul",
1705+ "rank": 15
1706+ },
1707+ {
1708+ "name": "Supreme Sword",
1709+ "rank": 16
1710+ },
1711+ {
1712+ "name": "TP Overdrive",
1713+ "rank": 17
1714+ }
1715+ ],
1716+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Hope%2FGameplay&prop=wikitext%7Ctext&format=json",
1717+ "strategy": "mastermind",
1718+ "capabilities": {
1719+ "tank": 1,
1720+ "support": 3,
1721+ "damage": 1,
1722+ "control": 2
1723+ }
1724+ },
1725+ {
1726+ "name": "Liesel",
1727+ "className": "Partisan Eagle+",
1728+ "ranged": "Dual Guns",
1729+ "melee": "Javelin",
1730+ "startLevel": 25,
1731+ "startRank": 3,
1732+ "maxRank": 20,
1733+ "skillSlots": 3,
1734+ "defaultArts": [
1735+ "Arcing Horn",
1736+ "Sliding Slinger",
1737+ "Effect Charge",
1738+ "Overwhelm"
1739+ ],
1740+ "arts": [
1741+ {
1742+ "name": "Arcing Horn",
1743+ "rank": 1
1744+ },
1745+ {
1746+ "name": "Sliding Slinger",
1747+ "rank": 1
1748+ },
1749+ {
1750+ "name": "Effect Charge",
1751+ "rank": 2
1752+ },
1753+ {
1754+ "name": "Overwhelm",
1755+ "rank": 3
1756+ },
1757+ {
1758+ "name": "Primer",
1759+ "rank": 4
1760+ },
1761+ {
1762+ "name": "Raijin",
1763+ "rank": 5
1764+ },
1765+ {
1766+ "name": "Violent Streak",
1767+ "rank": 6
1768+ },
1769+ {
1770+ "name": "Early Bird",
1771+ "rank": 7
1772+ },
1773+ {
1774+ "name": "Speed Demon",
1775+ "rank": 8
1776+ },
1777+ {
1778+ "name": "Executioner",
1779+ "rank": 9
1780+ },
1781+ {
1782+ "name": "Mind Shift",
1783+ "rank": 10
1784+ },
1785+ {
1786+ "name": "Combat Limbo",
1787+ "rank": 11
1788+ },
1789+ {
1790+ "name": "Hair Trigger",
1791+ "rank": 12
1792+ },
1793+ {
1794+ "name": "Ghostwalker",
1795+ "rank": 13
1796+ },
1797+ {
1798+ "name": "Spiral Horn",
1799+ "rank": 14
1800+ },
1801+ {
1802+ "name": "Trident Buster",
1803+ "rank": 15
1804+ }
1805+ ],
1806+ "skills": [
1807+ {
1808+ "name": "Quick Reload",
1809+ "rank": 7
1810+ },
1811+ {
1812+ "name": "Knock 'n' Shock",
1813+ "rank": 9
1814+ },
1815+ {
1816+ "name": "Crisis Catalyst",
1817+ "rank": 11
1818+ },
1819+ {
1820+ "name": "Conductive Strike",
1821+ "rank": 13
1822+ },
1823+ {
1824+ "name": "Electric Boost",
1825+ "rank": 14
1826+ },
1827+ {
1828+ "name": "Zero Lapse",
1829+ "rank": 15
1830+ },
1831+ {
1832+ "name": "Trigger Happy",
1833+ "rank": 16
1834+ },
1835+ {
1836+ "name": "Hellhound",
1837+ "rank": 17
1838+ }
1839+ ],
1840+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Liesel%2FGameplay&prop=wikitext%7Ctext&format=json",
1841+ "strategy": "astral",
1842+ "capabilities": {
1843+ "tank": 0,
1844+ "support": 1,
1845+ "damage": 3,
1846+ "control": 2
1847+ }
1848+ },
1849+ {
1850+ "name": "Murderess",
1851+ "className": "Winged Viper+",
1852+ "ranged": "Psycho Launchers",
1853+ "melee": "Dual Swords",
1854+ "startLevel": 21,
1855+ "startRank": 3,
1856+ "maxRank": 20,
1857+ "skillSlots": 3,
1858+ "defaultArts": [
1859+ "Side Slash",
1860+ "Back Slash",
1861+ "Stellar Ray",
1862+ "Jetstream"
1863+ ],
1864+ "arts": [
1865+ {
1866+ "name": "Side Slash",
1867+ "rank": 1
1868+ },
1869+ {
1870+ "name": "Jetstream",
1871+ "rank": 1
1872+ },
1873+ {
1874+ "name": "Back Slash",
1875+ "rank": 2
1876+ },
1877+ {
1878+ "name": "Stellar Ray",
1879+ "rank": 3
1880+ },
1881+ {
1882+ "name": "Lightning Cloak",
1883+ "rank": 4
1884+ },
1885+ {
1886+ "name": "Seventh Edge",
1887+ "rank": 5
1888+ },
1889+ {
1890+ "name": "Shadowrunner",
1891+ "rank": 6
1892+ },
1893+ {
1894+ "name": "Shooting Star",
1895+ "rank": 7
1896+ },
1897+ {
1898+ "name": "Thirsty Edge",
1899+ "rank": 8
1900+ },
1901+ {
1902+ "name": "Killing Machine",
1903+ "rank": 9
1904+ },
1905+ {
1906+ "name": "Gravity Lunge",
1907+ "rank": 10
1908+ },
1909+ {
1910+ "name": "Electric Surge",
1911+ "rank": 11
1912+ },
1913+ {
1914+ "name": "Astral Protection",
1915+ "rank": 12
1916+ },
1917+ {
1918+ "name": "Hundred Shells",
1919+ "rank": 13
1920+ }
1921+ ],
1922+ "skills": [
1923+ {
1924+ "name": "Agile Gunslinger",
1925+ "rank": 7
1926+ },
1927+ {
1928+ "name": "Boosted Bullets",
1929+ "rank": 9
1930+ },
1931+ {
1932+ "name": "High Tension",
1933+ "rank": 11
1934+ },
1935+ {
1936+ "name": "Mechanoid Slayer",
1937+ "rank": 13
1938+ },
1939+ {
1940+ "name": "Trigger Happy",
1941+ "rank": 14
1942+ },
1943+ {
1944+ "name": "Aura Assault",
1945+ "rank": 15
1946+ },
1947+ {
1948+ "name": "Lifeline",
1949+ "rank": 16
1950+ },
1951+ {
1952+ "name": "Hellhound",
1953+ "rank": 17
1954+ }
1955+ ],
1956+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Murderess%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Murderess%2FGameplay&prop=text&format=json",
1957+ "strategy": "jaguar",
1958+ "capabilities": {
1959+ "tank": 0,
1960+ "support": 0,
1961+ "damage": 3,
1962+ "control": 2
1963+ }
1964+ },
1965+ {
1966+ "name": "Nagi",
1967+ "className": "Duelist+",
1968+ "ranged": "Gatling Gun",
1969+ "melee": "Longsword",
1970+ "startLevel": 33,
1971+ "startRank": 4,
1972+ "maxRank": 20,
1973+ "skillSlots": 5,
1974+ "defaultArts": [
1975+ "True Stream Edge",
1976+ "Cool Off",
1977+ "Thermal Payload",
1978+ "Enhanced Stand"
1979+ ],
1980+ "arts": [
1981+ {
1982+ "name": "Rising Blade",
1983+ "rank": 1
1984+ },
1985+ {
1986+ "name": "Enhanced Stand",
1987+ "rank": 1
1988+ },
1989+ {
1990+ "name": "Thermal Payload",
1991+ "rank": 2
1992+ },
1993+ {
1994+ "name": "Cool Off",
1995+ "rank": 3
1996+ },
1997+ {
1998+ "name": "True Stream Edge",
1999+ "rank": 4
2000+ },
2001+ {
2002+ "name": "Magnum Edge",
2003+ "rank": 5
2004+ },
2005+ {
2006+ "name": "Bullet Storm",
2007+ "rank": 6
2008+ },
2009+ {
2010+ "name": "Defensive Stance",
2011+ "rank": 7
2012+ },
2013+ {
2014+ "name": "Offensive Stance",
2015+ "rank": 8
2016+ },
2017+ {
2018+ "name": "Burning Slash",
2019+ "rank": 9
2020+ },
2021+ {
2022+ "name": "Blossom Dance",
2023+ "rank": 10
2024+ },
2025+ {
2026+ "name": "Samurai Soul",
2027+ "rank": 11
2028+ },
2029+ {
2030+ "name": "Missile Volley",
2031+ "rank": 12
2032+ },
2033+ {
2034+ "name": "Incendiary Edge",
2035+ "rank": 13
2036+ }
2037+ ],
2038+ "skills": [
2039+ {
2040+ "name": "Steel Flesh",
2041+ "rank": 7
2042+ },
2043+ {
2044+ "name": "Mighty Muscle",
2045+ "rank": 9
2046+ },
2047+ {
2048+ "name": "Trauma Tension",
2049+ "rank": 11
2050+ },
2051+ {
2052+ "name": "Rising Renewal",
2053+ "rank": 13
2054+ },
2055+ {
2056+ "name": "Yamato Spirit",
2057+ "rank": 14
2058+ },
2059+ {
2060+ "name": "Fortified Flesh",
2061+ "rank": 15
2062+ },
2063+ {
2064+ "name": "Machine Gunner",
2065+ "rank": 16
2066+ },
2067+ {
2068+ "name": "Grand Procession",
2069+ "rank": 17
2070+ }
2071+ ],
2072+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&section=3&prop=text&format=json",
2073+ "strategy": "duelist",
2074+ "capabilities": {
2075+ "tank": 2,
2076+ "support": 1,
2077+ "damage": 3,
2078+ "control": 2
2079+ }
2080+ },
2081+ {
2082+ "name": "Phog",
2083+ "className": "Winged Viper+",
2084+ "ranged": "Dual Guns",
2085+ "melee": "Dual Swords",
2086+ "startLevel": 15,
2087+ "startRank": 3,
2088+ "maxRank": 20,
2089+ "skillSlots": 3,
2090+ "defaultArts": [
2091+ "Back Slash",
2092+ "Upper Hand",
2093+ "Sky High",
2094+ "Sliding Slinger"
2095+ ],
2096+ "arts": [
2097+ {
2098+ "name": "Back Slash",
2099+ "rank": 1
2100+ },
2101+ {
2102+ "name": "Sliding Slinger",
2103+ "rank": 1
2104+ },
2105+ {
2106+ "name": "Upper Hand",
2107+ "rank": 2
2108+ },
2109+ {
2110+ "name": "Sky High",
2111+ "rank": 3
2112+ },
2113+ {
2114+ "name": "Shadowrunner",
2115+ "rank": 4
2116+ },
2117+ {
2118+ "name": "Side Slash",
2119+ "rank": 5
2120+ },
2121+ {
2122+ "name": "Stream Edge",
2123+ "rank": 6
2124+ },
2125+ {
2126+ "name": "Primer",
2127+ "rank": 7
2128+ },
2129+ {
2130+ "name": "Early Bird",
2131+ "rank": 8
2132+ },
2133+ {
2134+ "name": "Electric Surge",
2135+ "rank": 9
2136+ },
2137+ {
2138+ "name": "Executioner",
2139+ "rank": 10
2140+ },
2141+ {
2142+ "name": "Ghostwalker",
2143+ "rank": 11
2144+ },
2145+ {
2146+ "name": "Crisis Zone",
2147+ "rank": 12
2148+ },
2149+ {
2150+ "name": "Blood Sacrifice",
2151+ "rank": 13
2152+ },
2153+ {
2154+ "name": "Combat Limbo",
2155+ "rank": 14
2156+ },
2157+ {
2158+ "name": "Hundred Shells",
2159+ "rank": 15
2160+ }
2161+ ],
2162+ "skills": [
2163+ {
2164+ "name": "Agile Gunslinger",
2165+ "rank": 7
2166+ },
2167+ {
2168+ "name": "Steady Hand",
2169+ "rank": 9
2170+ },
2171+ {
2172+ "name": "Background Noise",
2173+ "rank": 11
2174+ },
2175+ {
2176+ "name": "Master Edge",
2177+ "rank": 13
2178+ },
2179+ {
2180+ "name": "Mortal Enemy",
2181+ "rank": 15
2182+ },
2183+ {
2184+ "name": "Hellhound",
2185+ "rank": 16
2186+ },
2187+ {
2188+ "name": "Crisis Catalyst",
2189+ "rank": 17
2190+ },
2191+ {
2192+ "name": "Phantom Counter",
2193+ "rank": 18
2194+ }
2195+ ],
2196+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&section=6&prop=text&format=json",
2197+ "strategy": "jaguar",
2198+ "capabilities": {
2199+ "tank": 1,
2200+ "support": 1,
2201+ "damage": 3,
2202+ "control": 1
2203+ }
2204+ },
2205+ {
2206+ "name": "Yelv",
2207+ "className": "Blast Fencer+",
2208+ "ranged": "Raygun",
2209+ "melee": "Photon Saber",
2210+ "startLevel": 14,
2211+ "startRank": 3,
2212+ "maxRank": 20,
2213+ "skillSlots": 3,
2214+ "defaultArts": [
2215+ "Starfall Blade",
2216+ "Starfall Rondo",
2217+ "Gravity Cloak",
2218+ "Beam Barrage"
2219+ ],
2220+ "arts": [
2221+ {
2222+ "name": "Starfall Blade",
2223+ "rank": 1
2224+ },
2225+ {
2226+ "name": "Beam Barrage",
2227+ "rank": 1
2228+ },
2229+ {
2230+ "name": "Starfall Rondo",
2231+ "rank": 2
2232+ },
2233+ {
2234+ "name": "Gravity Cloak",
2235+ "rank": 3
2236+ },
2237+ {
2238+ "name": "Geolibrium",
2239+ "rank": 4
2240+ },
2241+ {
2242+ "name": "Essence Exchange",
2243+ "rank": 5
2244+ },
2245+ {
2246+ "name": "Ether Blast",
2247+ "rank": 6
2248+ },
2249+ {
2250+ "name": "Myopic Screen",
2251+ "rank": 7
2252+ },
2253+ {
2254+ "name": "Astrolibrium",
2255+ "rank": 8
2256+ },
2257+ {
2258+ "name": "Astral Heal",
2259+ "rank": 9
2260+ },
2261+ {
2262+ "name": "Starfall Blossom",
2263+ "rank": 10
2264+ },
2265+ {
2266+ "name": "Master Gunner",
2267+ "rank": 11
2268+ },
2269+ {
2270+ "name": "Subterfuge",
2271+ "rank": 12
2272+ },
2273+ {
2274+ "name": "Astral Purge",
2275+ "rank": 13
2276+ },
2277+ {
2278+ "name": "Novalibrium",
2279+ "rank": 14
2280+ },
2281+ {
2282+ "name": "Galactic Cataclysm",
2283+ "rank": 15
2284+ }
2285+ ],
2286+ "skills": [
2287+ {
2288+ "name": "Inner Search",
2289+ "rank": 7
2290+ },
2291+ {
2292+ "name": "Beam Boost",
2293+ "rank": 9
2294+ },
2295+ {
2296+ "name": "High Tension",
2297+ "rank": 11
2298+ },
2299+ {
2300+ "name": "Mechanoid Slayer",
2301+ "rank": 13
2302+ },
2303+ {
2304+ "name": "Knight's Soul",
2305+ "rank": 14
2306+ },
2307+ {
2308+ "name": "Supreme Sword",
2309+ "rank": 15
2310+ },
2311+ {
2312+ "name": "Secondary Accelerator",
2313+ "rank": 16
2314+ },
2315+ {
2316+ "name": "Synchrony",
2317+ "rank": 17
2318+ }
2319+ ],
2320+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&section=3&prop=text&format=json",
2321+ "strategy": "galactic",
2322+ "capabilities": {
2323+ "tank": 1,
2324+ "support": 1,
2325+ "damage": 3,
2326+ "control": 1
2327+ }
2328+ },
2329+ {
2330+ "name": "Mia",
2331+ "className": "Psycorruptor",
2332+ "ranged": "Raygun",
2333+ "melee": "Knife",
2334+ "startLevel": 46,
2335+ "startRank": 3,
2336+ "maxRank": 20,
2337+ "skillSlots": 3,
2338+ "defaultArts": [
2339+ "Screamer",
2340+ "Clarity Ray",
2341+ "Myopic Screen",
2342+ "Beam Barrage"
2343+ ],
2344+ "arts": [
2345+ {
2346+ "name": "Screamer",
2347+ "rank": 1
2348+ },
2349+ {
2350+ "name": "Beam Barrage",
2351+ "rank": 1
2352+ },
2353+ {
2354+ "name": "Myopic Screen",
2355+ "rank": 2
2356+ },
2357+ {
2358+ "name": "Clarity Ray",
2359+ "rank": 3
2360+ },
2361+ {
2362+ "name": "Full Specs",
2363+ "rank": 4
2364+ },
2365+ {
2366+ "name": "Ether Blast",
2367+ "rank": 5
2368+ },
2369+ {
2370+ "name": "Subterfuge",
2371+ "rank": 6
2372+ },
2373+ {
2374+ "name": "Dispel",
2375+ "rank": 7
2376+ },
2377+ {
2378+ "name": "Gravity Cloak",
2379+ "rank": 8
2380+ },
2381+ {
2382+ "name": "Energy Source",
2383+ "rank": 9
2384+ },
2385+ {
2386+ "name": "Beam Bomber",
2387+ "rank": 10
2388+ },
2389+ {
2390+ "name": "Black Butterfly",
2391+ "rank": 11
2392+ },
2393+ {
2394+ "name": "Pathogen Blast",
2395+ "rank": 12
2396+ },
2397+ {
2398+ "name": "Gravity Blast",
2399+ "rank": 13
2400+ }
2401+ ],
2402+ "skills": [
2403+ {
2404+ "name": "Inner Search",
2405+ "rank": 7
2406+ },
2407+ {
2408+ "name": "Beam Boost",
2409+ "rank": 9
2410+ },
2411+ {
2412+ "name": "Beauty Sleep",
2413+ "rank": 11
2414+ },
2415+ {
2416+ "name": "Ether Boost",
2417+ "rank": 13
2418+ },
2419+ {
2420+ "name": "Extra Armor",
2421+ "rank": 14
2422+ },
2423+ {
2424+ "name": "Gravity Boost",
2425+ "rank": 15
2426+ },
2427+ {
2428+ "name": "Resistant Flesh",
2429+ "rank": 16
2430+ },
2431+ {
2432+ "name": "Tactical Analyst",
2433+ "rank": 17
2434+ }
2435+ ],
2436+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&section=6&prop=text&format=json",
2437+ "strategy": "mastermind",
2438+ "capabilities": {
2439+ "tank": 0,
2440+ "support": 3,
2441+ "damage": 1,
2442+ "control": 3
2443+ }
2444+ },
2445+ {
2446+ "name": "Neilnail",
2447+ "className": "Full Metal Jaguar+",
2448+ "ranged": "Psycho Launchers",
2449+ "melee": "Dual Swords",
2450+ "startLevel": 20,
2451+ "startRank": 3,
2452+ "maxRank": 20,
2453+ "skillSlots": 4,
2454+ "defaultArts": [
2455+ "Back Slash",
2456+ "Side Slash",
2457+ "Jetstream",
2458+ "Lightning Cloak"
2459+ ],
2460+ "arts": [
2461+ {
2462+ "name": "Back Slash",
2463+ "rank": 1
2464+ },
2465+ {
2466+ "name": "Jetstream",
2467+ "rank": 1
2468+ },
2469+ {
2470+ "name": "Side Slash",
2471+ "rank": 2
2472+ },
2473+ {
2474+ "name": "Lightning Cloak",
2475+ "rank": 3
2476+ },
2477+ {
2478+ "name": "Shadowrunner",
2479+ "rank": 4
2480+ },
2481+ {
2482+ "name": "Stellar Ray",
2483+ "rank": 5
2484+ },
2485+ {
2486+ "name": "Blood Sacrifice",
2487+ "rank": 6
2488+ },
2489+ {
2490+ "name": "Shooting Star",
2491+ "rank": 7
2492+ },
2493+ {
2494+ "name": "Hundred Shells",
2495+ "rank": 8
2496+ },
2497+ {
2498+ "name": "Conduction Rise",
2499+ "rank": 9
2500+ },
2501+ {
2502+ "name": "Upper Hand",
2503+ "rank": 10
2504+ },
2505+ {
2506+ "name": "Astral Protection",
2507+ "rank": 11
2508+ },
2509+ {
2510+ "name": "Electric Surge",
2511+ "rank": 12
2512+ },
2513+ {
2514+ "name": "Heroic Tale",
2515+ "rank": 13
2516+ },
2517+ {
2518+ "name": "Starlight Kick",
2519+ "rank": 14
2520+ },
2521+ {
2522+ "name": "Thirsty Edge",
2523+ "rank": 15
2524+ }
2525+ ],
2526+ "skills": [
2527+ {
2528+ "name": "Ether Boost",
2529+ "rank": 7
2530+ },
2531+ {
2532+ "name": "Aura Assault",
2533+ "rank": 9
2534+ },
2535+ {
2536+ "name": "Knight's Soul",
2537+ "rank": 11
2538+ },
2539+ {
2540+ "name": "Supreme Sword",
2541+ "rank": 13
2542+ },
2543+ {
2544+ "name": "Buff Extender",
2545+ "rank": 14
2546+ },
2547+ {
2548+ "name": "Buff Heal",
2549+ "rank": 15
2550+ },
2551+ {
2552+ "name": "Inner Search",
2553+ "rank": 16
2554+ },
2555+ {
2556+ "name": "Fast Forward",
2557+ "rank": 17
2558+ }
2559+ ],
2560+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Neilnail%2FGameplay&prop=wikitext%7Ctext&format=json",
2561+ "strategy": "jaguar",
2562+ "capabilities": {
2563+ "tank": 1,
2564+ "support": 1,
2565+ "damage": 3,
2566+ "control": 1
2567+ }
2568+ },
2569+ {
2570+ "name": "Al",
2571+ "className": "Duelist+",
2572+ "ranged": "Sniper Rifle",
2573+ "melee": "Longsword",
2574+ "startLevel": 50,
2575+ "startRank": 3,
2576+ "maxRank": 20,
2577+ "skillSlots": 4,
2578+ "defaultArts": [
2579+ "Rising Blade",
2580+ "First Down",
2581+ "Magnum Edge",
2582+ "Eagle Eye"
2583+ ],
2584+ "arts": [
2585+ {
2586+ "name": "Rising Blade",
2587+ "rank": 1
2588+ },
2589+ {
2590+ "name": "First Down",
2591+ "rank": 1
2592+ },
2593+ {
2594+ "name": "Magnum Edge",
2595+ "rank": 2
2596+ },
2597+ {
2598+ "name": "Eagle Eye",
2599+ "rank": 3
2600+ },
2601+ {
2602+ "name": "Offensive Stance",
2603+ "rank": 4
2604+ },
2605+ {
2606+ "name": "Shrapnel",
2607+ "rank": 5
2608+ },
2609+ {
2610+ "name": "Hawkeye",
2611+ "rank": 6
2612+ },
2613+ {
2614+ "name": "Tornado Blade",
2615+ "rank": 7
2616+ },
2617+ {
2618+ "name": "Intercept",
2619+ "rank": 8
2620+ },
2621+ {
2622+ "name": "Burning Slash",
2623+ "rank": 9
2624+ },
2625+ {
2626+ "name": "Sidewinder",
2627+ "rank": 10
2628+ },
2629+ {
2630+ "name": "Hercules Blow",
2631+ "rank": 11
2632+ },
2633+ {
2634+ "name": "Ghost Sniper",
2635+ "rank": 12
2636+ },
2637+ {
2638+ "name": "Samurai Soul",
2639+ "rank": 13
2640+ },
2641+ {
2642+ "name": "Incendiary Edge",
2643+ "rank": 14
2644+ },
2645+ {
2646+ "name": "Howling Soul",
2647+ "rank": 15
2648+ }
2649+ ],
2650+ "skills": [
2651+ {
2652+ "name": "Steel Flesh",
2653+ "rank": 7
2654+ },
2655+ {
2656+ "name": "Mighty Muscle",
2657+ "rank": 9
2658+ },
2659+ {
2660+ "name": "Quick Reload",
2661+ "rank": 11
2662+ },
2663+ {
2664+ "name": "Conflagrant Edge",
2665+ "rank": 13
2666+ },
2667+ {
2668+ "name": "Healing Touch",
2669+ "rank": 14
2670+ },
2671+ {
2672+ "name": "Boosted Bullets",
2673+ "rank": 15
2674+ },
2675+ {
2676+ "name": "Dismantler",
2677+ "rank": 16
2678+ },
2679+ {
2680+ "name": "Grand Procession",
2681+ "rank": 17
2682+ }
2683+ ],
2684+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Al%2FGameplay&prop=wikitext%7Ctext&format=json",
2685+ "strategy": "duelist",
2686+ "capabilities": {
2687+ "tank": 1,
2688+ "support": 0,
2689+ "damage": 3,
2690+ "control": 1
2691+ }
2692+ }
2693+];
2694+
2695+export const companionByName = new Map(
2696+ companions.map((companion) => [companion.name, companion]),
2697+);
new file mode 100644
@@ -0,0 +1,2697 @@
1+import type { CompanionFact } from "@/src/lib/types";
2+
3+/** Canonical personal kits plus explicitly heuristic strategy metadata. */
4+export const companions: readonly CompanionFact[] = [
5+ {
6+ "name": "Elma",
7+ "className": "Full Metal Jaguar",
8+ "ranged": "Dual Guns",
9+ "melee": "Dual Swords",
10+ "startLevel": 5,
11+ "startRank": 3,
12+ "maxRank": 20,
13+ "skillSlots": 4,
14+ "defaultArts": [
15+ "Shadowstrike",
16+ "Stream Edge",
17+ "Upper Hand",
18+ "Sliding Slinger"
19+ ],
20+ "arts": [
21+ {
22+ "name": "Shadowstrike",
23+ "rank": 1
24+ },
25+ {
26+ "name": "Sliding Slinger",
27+ "rank": 1
28+ },
29+ {
30+ "name": "Stream Edge",
31+ "rank": 2
32+ },
33+ {
34+ "name": "Upper Hand",
35+ "rank": 3
36+ },
37+ {
38+ "name": "Early Bird",
39+ "rank": 4
40+ },
41+ {
42+ "name": "Side Slash",
43+ "rank": 5
44+ },
45+ {
46+ "name": "Shadowrunner",
47+ "rank": 6
48+ },
49+ {
50+ "name": "Primer",
51+ "rank": 7
52+ },
53+ {
54+ "name": "Thirsty Edge",
55+ "rank": 8
56+ },
57+ {
58+ "name": "Violent Streak",
59+ "rank": 9
60+ },
61+ {
62+ "name": "Killing Machine",
63+ "rank": 10
64+ },
65+ {
66+ "name": "Blood Sacrifice",
67+ "rank": 11
68+ },
69+ {
70+ "name": "Electric Surge",
71+ "rank": 12
72+ },
73+ {
74+ "name": "Ghost Factory",
75+ "rank": 13
76+ },
77+ {
78+ "name": "Executioner",
79+ "rank": 14
80+ },
81+ {
82+ "name": "Hundred Shells",
83+ "rank": 15
84+ }
85+ ],
86+ "skills": [
87+ {
88+ "name": "Agile Gunslinger",
89+ "rank": 7
90+ },
91+ {
92+ "name": "Steady Hand",
93+ "rank": 9
94+ },
95+ {
96+ "name": "Background Noise",
97+ "rank": 11
98+ },
99+ {
100+ "name": "Master Edge",
101+ "rank": 13
102+ },
103+ {
104+ "name": "Mortal Enemy",
105+ "rank": 15
106+ },
107+ {
108+ "name": "Hellhound",
109+ "rank": 16
110+ },
111+ {
112+ "name": "Crisis Catalyst",
113+ "rank": 17
114+ },
115+ {
116+ "name": "Phantom Counter",
117+ "rank": 18
118+ }
119+ ],
120+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Elma%2FGameplay%20%28XCX%29&prop=wikitext%7Ctext&format=json",
121+ "strategy": "jaguar",
122+ "capabilities": {
123+ "tank": 1,
124+ "support": 0,
125+ "damage": 3,
126+ "control": 1
127+ }
128+ },
129+ {
130+ "name": "Lin",
131+ "className": "Shield Trooper",
132+ "ranged": "Gatling Gun",
133+ "melee": "Shield",
134+ "startLevel": 5,
135+ "startRank": 3,
136+ "maxRank": 20,
137+ "skillSlots": 3,
138+ "defaultArts": [
139+ "Wild Down",
140+ "Wild Smash",
141+ "Flame Cloak",
142+ "Fire Carnival"
143+ ],
144+ "arts": [
145+ {
146+ "name": "Wild Down",
147+ "rank": 1
148+ },
149+ {
150+ "name": "Fire Carnival",
151+ "rank": 1
152+ },
153+ {
154+ "name": "Wild Smash",
155+ "rank": 2
156+ },
157+ {
158+ "name": "Flame Cloak",
159+ "rank": 3
160+ },
161+ {
162+ "name": "Trash Talk",
163+ "rank": 4
164+ },
165+ {
166+ "name": "Thermal Payload",
167+ "rank": 5
168+ },
169+ {
170+ "name": "Iron Prison",
171+ "rank": 6
172+ },
173+ {
174+ "name": "Bombardier",
175+ "rank": 7
176+ },
177+ {
178+ "name": "Bullet Storm",
179+ "rank": 8
180+ },
181+ {
182+ "name": "Supershield",
183+ "rank": 9
184+ },
185+ {
186+ "name": "Reality Rift",
187+ "rank": 10
188+ },
189+ {
190+ "name": "Enhanced Stand",
191+ "rank": 11
192+ },
193+ {
194+ "name": "Shield Wall",
195+ "rank": 12
196+ },
197+ {
198+ "name": "Hellfire",
199+ "rank": 13
200+ },
201+ {
202+ "name": "Drum Roll",
203+ "rank": 14
204+ },
205+ {
206+ "name": "Cool Off",
207+ "rank": 15
208+ }
209+ ],
210+ "skills": [
211+ {
212+ "name": "Steel Flesh",
213+ "rank": 7
214+ },
215+ {
216+ "name": "Mighty Muscle",
217+ "rank": 9
218+ },
219+ {
220+ "name": "Dismantler",
221+ "rank": 11
222+ },
223+ {
224+ "name": "Shield Screen",
225+ "rank": 13
226+ },
227+ {
228+ "name": "Long Topple",
229+ "rank": 15
230+ },
231+ {
232+ "name": "Dirty Fighter",
233+ "rank": 16
234+ },
235+ {
236+ "name": "Stand Strong",
237+ "rank": 17
238+ },
239+ {
240+ "name": "Machine Gunner",
241+ "rank": 18
242+ }
243+ ],
244+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Lin%2FGameplay&prop=wikitext%7Ctext&format=json",
245+ "strategy": "bastion",
246+ "capabilities": {
247+ "tank": 3,
248+ "support": 1,
249+ "damage": 1,
250+ "control": 3
251+ }
252+ },
253+ {
254+ "name": "Irina",
255+ "className": "Psycorruptor+",
256+ "ranged": "Assault Rifle",
257+ "melee": "Knife",
258+ "startLevel": 14,
259+ "startRank": 3,
260+ "maxRank": 20,
261+ "skillSlots": 4,
262+ "defaultArts": [
263+ "Repair",
264+ "Full Specs",
265+ "Furious Blast",
266+ "Burst Grenade"
267+ ],
268+ "arts": [
269+ {
270+ "name": "Repair",
271+ "rank": 1
272+ },
273+ {
274+ "name": "Burst Grenade",
275+ "rank": 1
276+ },
277+ {
278+ "name": "Full Specs",
279+ "rank": 2
280+ },
281+ {
282+ "name": "Furious Blast",
283+ "rank": 3
284+ },
285+ {
286+ "name": "Screamer",
287+ "rank": 4
288+ },
289+ {
290+ "name": "Smooth Recovery",
291+ "rank": 5
292+ },
293+ {
294+ "name": "Dispel",
295+ "rank": 6
296+ },
297+ {
298+ "name": "Flash Grenade",
299+ "rank": 7
300+ },
301+ {
302+ "name": "Brainjack",
303+ "rank": 8
304+ },
305+ {
306+ "name": "Medic Free",
307+ "rank": 9
308+ },
309+ {
310+ "name": "Quick Cannon",
311+ "rank": 10
312+ },
313+ {
314+ "name": "Absorber Skin",
315+ "rank": 11
316+ },
317+ {
318+ "name": "Assault Hammer",
319+ "rank": 12
320+ },
321+ {
322+ "name": "Servant Sacrifice",
323+ "rank": 13
324+ },
325+ {
326+ "name": "Energy Source",
327+ "rank": 14
328+ },
329+ {
330+ "name": "Last Stand",
331+ "rank": 15
332+ }
333+ ],
334+ "skills": [
335+ {
336+ "name": "Inner Search",
337+ "rank": 7
338+ },
339+ {
340+ "name": "Feather Touch",
341+ "rank": 9
342+ },
343+ {
344+ "name": "Healing Touch",
345+ "rank": 11
346+ },
347+ {
348+ "name": "High Tension",
349+ "rank": 13
350+ },
351+ {
352+ "name": "Beauty Sleep",
353+ "rank": 15
354+ },
355+ {
356+ "name": "King's Decree",
357+ "rank": 16
358+ },
359+ {
360+ "name": "Unpleasant Dream",
361+ "rank": 17
362+ },
363+ {
364+ "name": "King's Boon",
365+ "rank": 18
366+ }
367+ ],
368+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Irina%2FGameplay&prop=wikitext%7Ctext&format=json",
369+ "strategy": "mastermind",
370+ "capabilities": {
371+ "tank": 0,
372+ "support": 3,
373+ "damage": 1,
374+ "control": 2
375+ }
376+ },
377+ {
378+ "name": "Gwin",
379+ "className": "Samurai Gunner",
380+ "ranged": "Assault Rifle",
381+ "melee": "Longsword",
382+ "startLevel": 12,
383+ "startRank": 3,
384+ "maxRank": 20,
385+ "skillSlots": 3,
386+ "defaultArts": [
387+ "Rising Blade",
388+ "Defensive Stance",
389+ "Power Dive",
390+ "Furious Blast"
391+ ],
392+ "arts": [
393+ {
394+ "name": "Rising Blade",
395+ "rank": 1
396+ },
397+ {
398+ "name": "Furious Blast",
399+ "rank": 1
400+ },
401+ {
402+ "name": "Power Dive",
403+ "rank": 2
404+ },
405+ {
406+ "name": "Defensive Stance",
407+ "rank": 3
408+ },
409+ {
410+ "name": "Magnum Edge",
411+ "rank": 4
412+ },
413+ {
414+ "name": "Ultraslash",
415+ "rank": 5
416+ },
417+ {
418+ "name": "Burst Grenade",
419+ "rank": 6
420+ },
421+ {
422+ "name": "Offensive Stance",
423+ "rank": 7
424+ },
425+ {
426+ "name": "Decoy Round",
427+ "rank": 8
428+ },
429+ {
430+ "name": "Tornado Blade",
431+ "rank": 9
432+ },
433+ {
434+ "name": "Medic Free",
435+ "rank": 10
436+ },
437+ {
438+ "name": "Flash Grenade",
439+ "rank": 11
440+ },
441+ {
442+ "name": "Incendiary Edge",
443+ "rank": 12
444+ },
445+ {
446+ "name": "Grenade Blitz",
447+ "rank": 13
448+ },
449+ {
450+ "name": "Gunforce",
451+ "rank": 14
452+ },
453+ {
454+ "name": "Takedown Shot",
455+ "rank": 15
456+ }
457+ ],
458+ "skills": [
459+ {
460+ "name": "Unwavering Courage",
461+ "rank": 7
462+ },
463+ {
464+ "name": "Flame Trigger",
465+ "rank": 9
466+ },
467+ {
468+ "name": "Mighty Muscle",
469+ "rank": 11
470+ },
471+ {
472+ "name": "Auto Melee Boost",
473+ "rank": 13
474+ },
475+ {
476+ "name": "Healing Aura",
477+ "rank": 15
478+ },
479+ {
480+ "name": "Weapon Guard",
481+ "rank": 16
482+ },
483+ {
484+ "name": "Theroid Slayer",
485+ "rank": 17
486+ },
487+ {
488+ "name": "Conflagrant Edge",
489+ "rank": 18
490+ }
491+ ],
492+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Gwin%2FGameplay&prop=wikitext%7Ctext&format=json",
493+ "strategy": "duelist",
494+ "capabilities": {
495+ "tank": 1,
496+ "support": 0,
497+ "damage": 3,
498+ "control": 1
499+ }
500+ },
501+ {
502+ "name": "Doug",
503+ "className": "Blast Fencer+",
504+ "ranged": "Raygun",
505+ "melee": "Photon Saber",
506+ "startLevel": 18,
507+ "startRank": 3,
508+ "maxRank": 20,
509+ "skillSlots": 4,
510+ "defaultArts": [
511+ "Starfall Blade",
512+ "Starfall Rondo",
513+ "Geolibrium",
514+ "Beam Barrage"
515+ ],
516+ "arts": [
517+ {
518+ "name": "Starfall Blade",
519+ "rank": 1
520+ },
521+ {
522+ "name": "Beam Barrage",
523+ "rank": 1
524+ },
525+ {
526+ "name": "Starfall Rondo",
527+ "rank": 2
528+ },
529+ {
530+ "name": "Geolibrium",
531+ "rank": 3
532+ },
533+ {
534+ "name": "Myopic Screen",
535+ "rank": 4
536+ },
537+ {
538+ "name": "Starlight Duster",
539+ "rank": 5
540+ },
541+ {
542+ "name": "Astral Purge",
543+ "rank": 6
544+ },
545+ {
546+ "name": "Ether Blast",
547+ "rank": 7
548+ },
549+ {
550+ "name": "Novalibrium",
551+ "rank": 8
552+ },
553+ {
554+ "name": "Astral Heal",
555+ "rank": 9
556+ },
557+ {
558+ "name": "Subterfuge",
559+ "rank": 10
560+ },
561+ {
562+ "name": "Gravity Blast",
563+ "rank": 11
564+ },
565+ {
566+ "name": "Astral Horizon",
567+ "rank": 12
568+ },
569+ {
570+ "name": "Phenomenon",
571+ "rank": 13
572+ },
573+ {
574+ "name": "Pathogen Blast",
575+ "rank": 14
576+ },
577+ {
578+ "name": "Galactic Cataclysm",
579+ "rank": 15
580+ }
581+ ],
582+ "skills": [
583+ {
584+ "name": "Inner Search",
585+ "rank": 7
586+ },
587+ {
588+ "name": "Beam Boost",
589+ "rank": 9
590+ },
591+ {
592+ "name": "High Tension",
593+ "rank": 11
594+ },
595+ {
596+ "name": "Mechanoid Slayer",
597+ "rank": 13
598+ },
599+ {
600+ "name": "Knight's Soul",
601+ "rank": 15
602+ },
603+ {
604+ "name": "Aura Assault",
605+ "rank": 16
606+ },
607+ {
608+ "name": "Supreme Sword",
609+ "rank": 17
610+ },
611+ {
612+ "name": "Stellar Entry",
613+ "rank": 18
614+ }
615+ ],
616+ "source": "Xeno Series Wiki MediaWiki API: https://www.xenoserieswiki.org/w/api.php?action=parse&page=Doug%2FGameplay&prop=wikitext%7Ctext&format=json",
617+ "strategy": "galactic",
618+ "capabilities": {
619+ "tank": 1,
620+ "support": 1,
621+ "damage": 3,
622+ "control": 1
623+ }
624+ },
625+ {
626+ "name": "Lao",
627+ "className": "Partisan Eagle",
628+ "ranged": "Sniper Rifle",
629+ "melee": "Javelin",
630+ "startLevel": 15,
631+ "startRank": 3,
632+ "maxRank": 20,
633+ "skillSlots": 3,
634+ "defaultArts": [
635+ "Balance Breaker",
636+ "Arcing Horn",
637+ "First Down",
638+ "Shrapnel"
639+ ],
640+ "arts": [
641+ {
642+ "name": "Balance Breaker",
643+ "rank": 1
644+ },
645+ {
646+ "name": "Shrapnel",
647+ "rank": 1
648+ },
649+ {
650+ "name": "First Down",
651+ "rank": 2
652+ },
653+ {
654+ "name": "Arcing Horn",
655+ "rank": 3
656+ },
657+ {
658+ "name": "Eagle Eye",
659+ "rank": 4
660+ },
661+ {
662+ "name": "Raijin",
663+ "rank": 5
664+ },
665+ {
666+ "name": "Spiral Horn",
667+ "rank": 6
668+ },
669+ {
670+ "name": "Sidewinder",
671+ "rank": 7
672+ },
673+ {
674+ "name": "Overwhelm",
675+ "rank": 8
676+ },
677+ {
678+ "name": "Hawkeye",
679+ "rank": 9
680+ },
681+ {
682+ "name": "Speed Demon",
683+ "rank": 10
684+ },
685+ {
686+ "name": "Trident Buster",
687+ "rank": 11
688+ },
689+ {
690+ "name": "Intercept",
691+ "rank": 12
692+ },
693+ {
694+ "name": "Hair Trigger",
695+ "rank": 13
696+ },
697+ {
698+ "name": "Afterburner",
699+ "rank": 14
700+ },
701+ {
702+ "name": "Ghost Sniper",
703+ "rank": 15
704+ }
705+ ],
706+ "skills": [
707+ {
708+ "name": "Killshot",
709+ "rank": 7
710+ },
711+ {
712+ "name": "Electric Boost",
713+ "rank": 9
714+ },
715+ {
716+ "name": "Knock 'n' Shock",
717+ "rank": 11
718+ },
719+ {
720+ "name": "Piscinoid Slayer",
721+ "rank": 13
722+ },
723+ {
724+ "name": "Long Shot",
725+ "rank": 15
726+ },
727+ {
728+ "name": "Quick Reload",
729+ "rank": 16
730+ },
731+ {
732+ "name": "Conductive Strike",
733+ "rank": 17
734+ },
735+ {
736+ "name": "TP Overdrive",
737+ "rank": 18
738+ }
739+ ],
740+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Lao%2FGameplay&prop=wikitext%7Ctext&format=json",
741+ "strategy": "astral",
742+ "capabilities": {
743+ "tank": 0,
744+ "support": 1,
745+ "damage": 3,
746+ "control": 2
747+ }
748+ },
749+ {
750+ "name": "L",
751+ "className": "Shield Trooper+",
752+ "ranged": "Psycho Launchers",
753+ "melee": "Shield",
754+ "startLevel": 13,
755+ "startRank": 3,
756+ "maxRank": 20,
757+ "skillSlots": 3,
758+ "defaultArts": [
759+ "Wild Down",
760+ "Iron Prison",
761+ "Lightning Cloak",
762+ "Stellar Ray"
763+ ],
764+ "arts": [
765+ {
766+ "name": "Wild Down",
767+ "rank": 1
768+ },
769+ {
770+ "name": "Stellar Ray",
771+ "rank": 1
772+ },
773+ {
774+ "name": "Lightning Cloak",
775+ "rank": 2
776+ },
777+ {
778+ "name": "Iron Prison",
779+ "rank": 3
780+ },
781+ {
782+ "name": "Wild Smash",
783+ "rank": 4
784+ },
785+ {
786+ "name": "Mindstorm",
787+ "rank": 5
788+ },
789+ {
790+ "name": "Trash Talk",
791+ "rank": 6
792+ },
793+ {
794+ "name": "Shooting Star",
795+ "rank": 7
796+ },
797+ {
798+ "name": "Reality Rift",
799+ "rank": 8
800+ },
801+ {
802+ "name": "Shield Wall",
803+ "rank": 9
804+ },
805+ {
806+ "name": "Dual Dynamo",
807+ "rank": 10
808+ },
809+ {
810+ "name": "Bombardier",
811+ "rank": 11
812+ },
813+ {
814+ "name": "Flame Cloak",
815+ "rank": 12
816+ },
817+ {
818+ "name": "Astral Protection",
819+ "rank": 13
820+ },
821+ {
822+ "name": "Supershield",
823+ "rank": 14
824+ },
825+ {
826+ "name": "Starlight Kick",
827+ "rank": 15
828+ }
829+ ],
830+ "skills": [
831+ {
832+ "name": "Steel Flesh",
833+ "rank": 7
834+ },
835+ {
836+ "name": "Mighty Muscle",
837+ "rank": 9
838+ },
839+ {
840+ "name": "Shield Screen",
841+ "rank": 11
842+ },
843+ {
844+ "name": "Long Topple",
845+ "rank": 13
846+ },
847+ {
848+ "name": "Stand Strong",
849+ "rank": 15
850+ },
851+ {
852+ "name": "Mechanoid Slayer",
853+ "rank": 16
854+ },
855+ {
856+ "name": "Knight's Soul",
857+ "rank": 17
858+ },
859+ {
860+ "name": "Double Reflect",
861+ "rank": 18
862+ }
863+ ],
864+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=L%2FGameplay&prop=text&format=json",
865+ "strategy": "bastion",
866+ "capabilities": {
867+ "tank": 2,
868+ "support": 1,
869+ "damage": 1,
870+ "control": 3
871+ }
872+ },
873+ {
874+ "name": "H.B.",
875+ "className": "Shield Trooper+",
876+ "ranged": "Assault Rifle",
877+ "melee": "Shield",
878+ "startLevel": 12,
879+ "startRank": 3,
880+ "maxRank": 20,
881+ "skillSlots": 4,
882+ "defaultArts": [
883+ "Atomic Hit",
884+ "Power Dive",
885+ "Burst Grenade",
886+ "Decoy Round"
887+ ],
888+ "arts": [
889+ {
890+ "name": "Atomic Hit",
891+ "rank": 1
892+ },
893+ {
894+ "name": "Decoy Round",
895+ "rank": 1
896+ },
897+ {
898+ "name": "Burst Grenade",
899+ "rank": 2
900+ },
901+ {
902+ "name": "Power Dive",
903+ "rank": 3
904+ },
905+ {
906+ "name": "Iron Prison",
907+ "rank": 4
908+ },
909+ {
910+ "name": "Wild Smash",
911+ "rank": 5
912+ },
913+ {
914+ "name": "Furious Blast",
915+ "rank": 6
916+ },
917+ {
918+ "name": "Wild Down",
919+ "rank": 7
920+ },
921+ {
922+ "name": "Flash Grenade",
923+ "rank": 8
924+ },
925+ {
926+ "name": "Shield Wall",
927+ "rank": 9
928+ },
929+ {
930+ "name": "Flamehand",
931+ "rank": 10
932+ },
933+ {
934+ "name": "Takedown Shot",
935+ "rank": 11
936+ },
937+ {
938+ "name": "Trash Talk",
939+ "rank": 12
940+ },
941+ {
942+ "name": "Bombardier",
943+ "rank": 13
944+ },
945+ {
946+ "name": "Gunforce",
947+ "rank": 14
948+ },
949+ {
950+ "name": "Last Stand",
951+ "rank": 15
952+ }
953+ ],
954+ "skills": [
955+ {
956+ "name": "Steel Flesh",
957+ "rank": 7
958+ },
959+ {
960+ "name": "Mighty Muscle",
961+ "rank": 9
962+ },
963+ {
964+ "name": "Combat Presence",
965+ "rank": 11
966+ },
967+ {
968+ "name": "Topple Topper",
969+ "rank": 13
970+ },
971+ {
972+ "name": "Shield Screen",
973+ "rank": 14
974+ },
975+ {
976+ "name": "Long Topple",
977+ "rank": 15
978+ },
979+ {
980+ "name": "Trauma Tension",
981+ "rank": 16
982+ },
983+ {
984+ "name": "Double Spike",
985+ "rank": 17
986+ }
987+ ],
988+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=H.B.%2FGameplay&prop=text&format=json",
989+ "strategy": "bastion",
990+ "capabilities": {
991+ "tank": 3,
992+ "support": 2,
993+ "damage": 1,
994+ "control": 2
995+ }
996+ },
997+ {
998+ "name": "Alexa",
999+ "className": "Partisan Eagle+",
1000+ "ranged": "Assault Rifle",
1001+ "melee": "Javelin",
1002+ "startLevel": 17,
1003+ "startRank": 3,
1004+ "maxRank": 20,
1005+ "skillSlots": 3,
1006+ "defaultArts": [
1007+ "Arcing Horn",
1008+ "Spiral Horn",
1009+ "Power Dive",
1010+ "Furious Blast"
1011+ ],
1012+ "arts": [
1013+ {
1014+ "name": "Arcing Horn",
1015+ "rank": 1
1016+ },
1017+ {
1018+ "name": "Furious Blast",
1019+ "rank": 1
1020+ },
1021+ {
1022+ "name": "Spiral Horn",
1023+ "rank": 2
1024+ },
1025+ {
1026+ "name": "Power Dive",
1027+ "rank": 3
1028+ },
1029+ {
1030+ "name": "Overclock",
1031+ "rank": 4
1032+ },
1033+ {
1034+ "name": "Overwhelm",
1035+ "rank": 5
1036+ },
1037+ {
1038+ "name": "Burst Grenade",
1039+ "rank": 6
1040+ },
1041+ {
1042+ "name": "Decoy Round",
1043+ "rank": 7
1044+ },
1045+ {
1046+ "name": "Assault Hammer",
1047+ "rank": 8
1048+ },
1049+ {
1050+ "name": "Medic Free",
1051+ "rank": 9
1052+ },
1053+ {
1054+ "name": "Hair Trigger",
1055+ "rank": 10
1056+ },
1057+ {
1058+ "name": "Maximum Voltage",
1059+ "rank": 11
1060+ },
1061+ {
1062+ "name": "Raijin",
1063+ "rank": 12
1064+ },
1065+ {
1066+ "name": "Flash Grenade",
1067+ "rank": 13
1068+ },
1069+ {
1070+ "name": "Trident Buster",
1071+ "rank": 14
1072+ },
1073+ {
1074+ "name": "Gunforce",
1075+ "rank": 15
1076+ }
1077+ ],
1078+ "skills": [
1079+ {
1080+ "name": "Steel Flesh",
1081+ "rank": 7
1082+ },
1083+ {
1084+ "name": "High Tension",
1085+ "rank": 9
1086+ },
1087+ {
1088+ "name": "Electric Boost",
1089+ "rank": 11
1090+ },
1091+ {
1092+ "name": "Quick Reload",
1093+ "rank": 13
1094+ },
1095+ {
1096+ "name": "Fortified Flesh",
1097+ "rank": 14
1098+ },
1099+ {
1100+ "name": "TP Overdrive",
1101+ "rank": 15
1102+ },
1103+ {
1104+ "name": "Stellar Entry",
1105+ "rank": 16
1106+ },
1107+ {
1108+ "name": "Synchrony",
1109+ "rank": 17
1110+ }
1111+ ],
1112+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Alexa%2FGameplay&prop=text&format=json",
1113+ "strategy": "astral",
1114+ "capabilities": {
1115+ "tank": 0,
1116+ "support": 1,
1117+ "damage": 3,
1118+ "control": 2
1119+ }
1120+ },
1121+ {
1122+ "name": "Bozé",
1123+ "className": "Partisan Eagle",
1124+ "ranged": "Sniper Rifle",
1125+ "melee": "Javelin",
1126+ "startLevel": 20,
1127+ "startRank": 3,
1128+ "maxRank": 20,
1129+ "skillSlots": 3,
1130+ "defaultArts": [
1131+ "Spiral Horn",
1132+ "Arcing Horn",
1133+ "Eagle Eye",
1134+ "Shrapnel"
1135+ ],
1136+ "arts": [
1137+ {
1138+ "name": "Spiral Horn",
1139+ "rank": 1
1140+ },
1141+ {
1142+ "name": "Shrapnel",
1143+ "rank": 1
1144+ },
1145+ {
1146+ "name": "Arcing Horn",
1147+ "rank": 2
1148+ },
1149+ {
1150+ "name": "Eagle Eye",
1151+ "rank": 3
1152+ },
1153+ {
1154+ "name": "Raijin",
1155+ "rank": 4
1156+ },
1157+ {
1158+ "name": "Vortex",
1159+ "rank": 5
1160+ },
1161+ {
1162+ "name": "First Down",
1163+ "rank": 6
1164+ },
1165+ {
1166+ "name": "Overwhelm",
1167+ "rank": 7
1168+ },
1169+ {
1170+ "name": "Hair Trigger",
1171+ "rank": 8
1172+ },
1173+ {
1174+ "name": "Sidewinder",
1175+ "rank": 9
1176+ },
1177+ {
1178+ "name": "Ghost Sniper",
1179+ "rank": 10
1180+ },
1181+ {
1182+ "name": "Slayonet",
1183+ "rank": 11
1184+ },
1185+ {
1186+ "name": "Hawkeye",
1187+ "rank": 12
1188+ },
1189+ {
1190+ "name": "Speed Demon",
1191+ "rank": 13
1192+ },
1193+ {
1194+ "name": "Intercept",
1195+ "rank": 14
1196+ },
1197+ {
1198+ "name": "Trident Buster",
1199+ "rank": 15
1200+ }
1201+ ],
1202+ "skills": [
1203+ {
1204+ "name": "Master Edge",
1205+ "rank": 7
1206+ },
1207+ {
1208+ "name": "Killshot",
1209+ "rank": 9
1210+ },
1211+ {
1212+ "name": "Electric Guard",
1213+ "rank": 11
1214+ },
1215+ {
1216+ "name": "Electric Boost",
1217+ "rank": 13
1218+ },
1219+ {
1220+ "name": "Knock 'n' Shock",
1221+ "rank": 14
1222+ },
1223+ {
1224+ "name": "Quick Reload",
1225+ "rank": 15
1226+ },
1227+ {
1228+ "name": "Conductive Strike",
1229+ "rank": 16
1230+ },
1231+ {
1232+ "name": "TP Overdrive",
1233+ "rank": 17
1234+ }
1235+ ],
1236+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Boz%C3%A9%2FGameplay&prop=text&format=json",
1237+ "strategy": "astral",
1238+ "capabilities": {
1239+ "tank": 0,
1240+ "support": 0,
1241+ "damage": 3,
1242+ "control": 2
1243+ }
1244+ },
1245+ {
1246+ "name": "Celica",
1247+ "className": "Psycorruptor+",
1248+ "ranged": "Dual Guns",
1249+ "melee": "Knife",
1250+ "startLevel": 32,
1251+ "startRank": 3,
1252+ "maxRank": 20,
1253+ "skillSlots": 3,
1254+ "defaultArts": [
1255+ "Absorber Skin",
1256+ "Black Bane",
1257+ "Full Specs",
1258+ "Sliding Slinger"
1259+ ],
1260+ "arts": [
1261+ {
1262+ "name": "Absorber Skin",
1263+ "rank": 1
1264+ },
1265+ {
1266+ "name": "Sliding Slinger",
1267+ "rank": 1
1268+ },
1269+ {
1270+ "name": "Black Bane",
1271+ "rank": 2
1272+ },
1273+ {
1274+ "name": "Full Specs",
1275+ "rank": 3
1276+ },
1277+ {
1278+ "name": "Screamer",
1279+ "rank": 4
1280+ },
1281+ {
1282+ "name": "Primer",
1283+ "rank": 5
1284+ },
1285+ {
1286+ "name": "Violent Streak",
1287+ "rank": 6
1288+ },
1289+ {
1290+ "name": "Dispel",
1291+ "rank": 7
1292+ },
1293+ {
1294+ "name": "Early Bird",
1295+ "rank": 8
1296+ },
1297+ {
1298+ "name": "Energy Source",
1299+ "rank": 9
1300+ },
1301+ {
1302+ "name": "Zero Zero",
1303+ "rank": 10
1304+ },
1305+ {
1306+ "name": "Ghostwalker",
1307+ "rank": 11
1308+ },
1309+ {
1310+ "name": "Repair",
1311+ "rank": 12
1312+ },
1313+ {
1314+ "name": "Executioner",
1315+ "rank": 13
1316+ },
1317+ {
1318+ "name": "Combat Limbo",
1319+ "rank": 14
1320+ },
1321+ {
1322+ "name": "Black Butterfly",
1323+ "rank": 15
1324+ }
1325+ ],
1326+ "skills": [
1327+ {
1328+ "name": "Steady Hand",
1329+ "rank": 7
1330+ },
1331+ {
1332+ "name": "Inner Search",
1333+ "rank": 9
1334+ },
1335+ {
1336+ "name": "Aura Burst",
1337+ "rank": 11
1338+ },
1339+ {
1340+ "name": "Fleet Feet",
1341+ "rank": 13
1342+ },
1343+ {
1344+ "name": "Gentle Approach",
1345+ "rank": 15
1346+ },
1347+ {
1348+ "name": "Mindscape",
1349+ "rank": 16
1350+ },
1351+ {
1352+ "name": "Feather Touch",
1353+ "rank": 17
1354+ },
1355+ {
1356+ "name": "Red Zone",
1357+ "rank": 18
1358+ }
1359+ ],
1360+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Celica%2FGameplay&prop=wikitext%7Ctext&format=json",
1361+ "strategy": "mastermind",
1362+ "capabilities": {
1363+ "tank": 0,
1364+ "support": 3,
1365+ "damage": 1,
1366+ "control": 2
1367+ }
1368+ },
1369+ {
1370+ "name": "Frye",
1371+ "className": "Samurai Gunner+",
1372+ "ranged": "Gatling Gun",
1373+ "melee": "Longsword",
1374+ "startLevel": 16,
1375+ "startRank": 3,
1376+ "maxRank": 20,
1377+ "skillSlots": 3,
1378+ "defaultArts": [
1379+ "Rising Blade",
1380+ "Tornado Blade",
1381+ "Enhanced Stand",
1382+ "Missile Volley"
1383+ ],
1384+ "arts": [
1385+ {
1386+ "name": "Rising Blade",
1387+ "rank": 1
1388+ },
1389+ {
1390+ "name": "Missile Volley",
1391+ "rank": 1
1392+ },
1393+ {
1394+ "name": "Tornado Blade",
1395+ "rank": 2
1396+ },
1397+ {
1398+ "name": "Enhanced Stand",
1399+ "rank": 3
1400+ },
1401+ {
1402+ "name": "Bullet Twister",
1403+ "rank": 4
1404+ },
1405+ {
1406+ "name": "Burning Slash",
1407+ "rank": 5
1408+ },
1409+ {
1410+ "name": "Offensive Stance",
1411+ "rank": 6
1412+ },
1413+ {
1414+ "name": "Bullet Storm",
1415+ "rank": 7
1416+ },
1417+ {
1418+ "name": "Cool Off",
1419+ "rank": 8
1420+ },
1421+ {
1422+ "name": "Incendiary Edge",
1423+ "rank": 9
1424+ },
1425+ {
1426+ "name": "Titan Recharge",
1427+ "rank": 10
1428+ },
1429+ {
1430+ "name": "Thermal Payload",
1431+ "rank": 11
1432+ },
1433+ {
1434+ "name": "Defensive Stance",
1435+ "rank": 12
1436+ },
1437+ {
1438+ "name": "Hellfire",
1439+ "rank": 13
1440+ }
1441+ ],
1442+ "skills": [
1443+ {
1444+ "name": "Unwavering Courage",
1445+ "rank": 7
1446+ },
1447+ {
1448+ "name": "Mighty Muscle",
1449+ "rank": 9
1450+ },
1451+ {
1452+ "name": "Iron Knuckle",
1453+ "rank": 11
1454+ },
1455+ {
1456+ "name": "Rising Renewal",
1457+ "rank": 13
1458+ },
1459+ {
1460+ "name": "Weapon Guard",
1461+ "rank": 14
1462+ },
1463+ {
1464+ "name": "Trauma Tension",
1465+ "rank": 15
1466+ },
1467+ {
1468+ "name": "Blazing Auto",
1469+ "rank": 16
1470+ },
1471+ {
1472+ "name": "Machine Gunner",
1473+ "rank": 17
1474+ }
1475+ ],
1476+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Frye%2FGameplay&prop=wikitext%7Ctext&format=json",
1477+ "strategy": "duelist",
1478+ "capabilities": {
1479+ "tank": 1,
1480+ "support": 0,
1481+ "damage": 3,
1482+ "control": 1
1483+ }
1484+ },
1485+ {
1486+ "name": "Ga Jiarg",
1487+ "className": "Galactic Knight+",
1488+ "ranged": "Raygun",
1489+ "melee": "Photon Saber",
1490+ "startLevel": 40,
1491+ "startRank": 3,
1492+ "maxRank": 20,
1493+ "skillSlots": 4,
1494+ "defaultArts": [
1495+ "Starfall Blade",
1496+ "Beam Barrage",
1497+ "Sky Sunder",
1498+ "Subterfuge"
1499+ ],
1500+ "arts": [
1501+ {
1502+ "name": "Starfall Blade",
1503+ "rank": 1
1504+ },
1505+ {
1506+ "name": "Beam Barrage",
1507+ "rank": 1
1508+ },
1509+ {
1510+ "name": "Sky Sunder",
1511+ "rank": 2
1512+ },
1513+ {
1514+ "name": "Subterfuge",
1515+ "rank": 3
1516+ },
1517+ {
1518+ "name": "Gravity Cloak",
1519+ "rank": 4
1520+ },
1521+ {
1522+ "name": "Astrolibrium",
1523+ "rank": 5
1524+ },
1525+ {
1526+ "name": "Starfall Rondo",
1527+ "rank": 6
1528+ },
1529+ {
1530+ "name": "Myopic Screen",
1531+ "rank": 7
1532+ },
1533+ {
1534+ "name": "Astral Heal",
1535+ "rank": 8
1536+ },
1537+ {
1538+ "name": "Gravity Blast",
1539+ "rank": 9
1540+ },
1541+ {
1542+ "name": "Novalibrium",
1543+ "rank": 10
1544+ },
1545+ {
1546+ "name": "Ether Blast",
1547+ "rank": 11
1548+ },
1549+ {
1550+ "name": "Starfall Blossom",
1551+ "rank": 12
1552+ },
1553+ {
1554+ "name": "Pathogen Blast",
1555+ "rank": 13
1556+ },
1557+ {
1558+ "name": "Bahamut Wave",
1559+ "rank": 14
1560+ },
1561+ {
1562+ "name": "Galactic Cataclysm",
1563+ "rank": 15
1564+ }
1565+ ],
1566+ "skills": [
1567+ {
1568+ "name": "Inner Search",
1569+ "rank": 7
1570+ },
1571+ {
1572+ "name": "Beam Boost",
1573+ "rank": 9
1574+ },
1575+ {
1576+ "name": "Healing Touch",
1577+ "rank": 11
1578+ },
1579+ {
1580+ "name": "Aura Assault",
1581+ "rank": 13
1582+ },
1583+ {
1584+ "name": "Supreme Sword",
1585+ "rank": 14
1586+ },
1587+ {
1588+ "name": "Appendage Erosion",
1589+ "rank": 15
1590+ },
1591+ {
1592+ "name": "Tactical Analyst",
1593+ "rank": 16
1594+ },
1595+ {
1596+ "name": "Fast Forward",
1597+ "rank": 17
1598+ }
1599+ ],
1600+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Ga%20Jiarg%2FGameplay&prop=wikitext%7Ctext&format=json",
1601+ "strategy": "galactic",
1602+ "capabilities": {
1603+ "tank": 1,
1604+ "support": 1,
1605+ "damage": 3,
1606+ "control": 1
1607+ }
1608+ },
1609+ {
1610+ "name": "Hope",
1611+ "className": "Psycorruptor+",
1612+ "ranged": "Psycho Launchers",
1613+ "melee": "Knife",
1614+ "startLevel": 24,
1615+ "startRank": 3,
1616+ "maxRank": 20,
1617+ "skillSlots": 3,
1618+ "defaultArts": [
1619+ "Repair",
1620+ "Full Specs",
1621+ "Shooting Star",
1622+ "Stellar Ray"
1623+ ],
1624+ "arts": [
1625+ {
1626+ "name": "Repair",
1627+ "rank": 1
1628+ },
1629+ {
1630+ "name": "Stellar Ray",
1631+ "rank": 1
1632+ },
1633+ {
1634+ "name": "Full Specs",
1635+ "rank": 2
1636+ },
1637+ {
1638+ "name": "Shooting Star",
1639+ "rank": 3
1640+ },
1641+ {
1642+ "name": "Absorber Skin",
1643+ "rank": 4
1644+ },
1645+ {
1646+ "name": "Secondary Speed",
1647+ "rank": 5
1648+ },
1649+ {
1650+ "name": "Dispel",
1651+ "rank": 6
1652+ },
1653+ {
1654+ "name": "Brainjack",
1655+ "rank": 7
1656+ },
1657+ {
1658+ "name": "Servant Sacrifice",
1659+ "rank": 8
1660+ },
1661+ {
1662+ "name": "Energy Source",
1663+ "rank": 9
1664+ },
1665+ {
1666+ "name": "Tacit Censure",
1667+ "rank": 10
1668+ },
1669+ {
1670+ "name": "Astral Protection",
1671+ "rank": 11
1672+ },
1673+ {
1674+ "name": "Starlight Kick",
1675+ "rank": 12
1676+ },
1677+ {
1678+ "name": "Black Butterfly",
1679+ "rank": 13
1680+ }
1681+ ],
1682+ "skills": [
1683+ {
1684+ "name": "Inner Search",
1685+ "rank": 7
1686+ },
1687+ {
1688+ "name": "Buff Heal",
1689+ "rank": 9
1690+ },
1691+ {
1692+ "name": "Well-Weathered",
1693+ "rank": 11
1694+ },
1695+ {
1696+ "name": "Mechanoid Slayer",
1697+ "rank": 13
1698+ },
1699+ {
1700+ "name": "King's Decree",
1701+ "rank": 14
1702+ },
1703+ {
1704+ "name": "Knight's Soul",
1705+ "rank": 15
1706+ },
1707+ {
1708+ "name": "Supreme Sword",
1709+ "rank": 16
1710+ },
1711+ {
1712+ "name": "TP Overdrive",
1713+ "rank": 17
1714+ }
1715+ ],
1716+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Hope%2FGameplay&prop=wikitext%7Ctext&format=json",
1717+ "strategy": "mastermind",
1718+ "capabilities": {
1719+ "tank": 1,
1720+ "support": 3,
1721+ "damage": 1,
1722+ "control": 2
1723+ }
1724+ },
1725+ {
1726+ "name": "Liesel",
1727+ "className": "Partisan Eagle+",
1728+ "ranged": "Dual Guns",
1729+ "melee": "Javelin",
1730+ "startLevel": 25,
1731+ "startRank": 3,
1732+ "maxRank": 20,
1733+ "skillSlots": 3,
1734+ "defaultArts": [
1735+ "Arcing Horn",
1736+ "Sliding Slinger",
1737+ "Effect Charge",
1738+ "Overwhelm"
1739+ ],
1740+ "arts": [
1741+ {
1742+ "name": "Arcing Horn",
1743+ "rank": 1
1744+ },
1745+ {
1746+ "name": "Sliding Slinger",
1747+ "rank": 1
1748+ },
1749+ {
1750+ "name": "Effect Charge",
1751+ "rank": 2
1752+ },
1753+ {
1754+ "name": "Overwhelm",
1755+ "rank": 3
1756+ },
1757+ {
1758+ "name": "Primer",
1759+ "rank": 4
1760+ },
1761+ {
1762+ "name": "Raijin",
1763+ "rank": 5
1764+ },
1765+ {
1766+ "name": "Violent Streak",
1767+ "rank": 6
1768+ },
1769+ {
1770+ "name": "Early Bird",
1771+ "rank": 7
1772+ },
1773+ {
1774+ "name": "Speed Demon",
1775+ "rank": 8
1776+ },
1777+ {
1778+ "name": "Executioner",
1779+ "rank": 9
1780+ },
1781+ {
1782+ "name": "Mind Shift",
1783+ "rank": 10
1784+ },
1785+ {
1786+ "name": "Combat Limbo",
1787+ "rank": 11
1788+ },
1789+ {
1790+ "name": "Hair Trigger",
1791+ "rank": 12
1792+ },
1793+ {
1794+ "name": "Ghostwalker",
1795+ "rank": 13
1796+ },
1797+ {
1798+ "name": "Spiral Horn",
1799+ "rank": 14
1800+ },
1801+ {
1802+ "name": "Trident Buster",
1803+ "rank": 15
1804+ }
1805+ ],
1806+ "skills": [
1807+ {
1808+ "name": "Quick Reload",
1809+ "rank": 7
1810+ },
1811+ {
1812+ "name": "Knock 'n' Shock",
1813+ "rank": 9
1814+ },
1815+ {
1816+ "name": "Crisis Catalyst",
1817+ "rank": 11
1818+ },
1819+ {
1820+ "name": "Conductive Strike",
1821+ "rank": 13
1822+ },
1823+ {
1824+ "name": "Electric Boost",
1825+ "rank": 14
1826+ },
1827+ {
1828+ "name": "Zero Lapse",
1829+ "rank": 15
1830+ },
1831+ {
1832+ "name": "Trigger Happy",
1833+ "rank": 16
1834+ },
1835+ {
1836+ "name": "Hellhound",
1837+ "rank": 17
1838+ }
1839+ ],
1840+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Liesel%2FGameplay&prop=wikitext%7Ctext&format=json",
1841+ "strategy": "astral",
1842+ "capabilities": {
1843+ "tank": 0,
1844+ "support": 1,
1845+ "damage": 3,
1846+ "control": 2
1847+ }
1848+ },
1849+ {
1850+ "name": "Murderess",
1851+ "className": "Winged Viper+",
1852+ "ranged": "Psycho Launchers",
1853+ "melee": "Dual Swords",
1854+ "startLevel": 21,
1855+ "startRank": 3,
1856+ "maxRank": 20,
1857+ "skillSlots": 3,
1858+ "defaultArts": [
1859+ "Side Slash",
1860+ "Back Slash",
1861+ "Stellar Ray",
1862+ "Jetstream"
1863+ ],
1864+ "arts": [
1865+ {
1866+ "name": "Side Slash",
1867+ "rank": 1
1868+ },
1869+ {
1870+ "name": "Jetstream",
1871+ "rank": 1
1872+ },
1873+ {
1874+ "name": "Back Slash",
1875+ "rank": 2
1876+ },
1877+ {
1878+ "name": "Stellar Ray",
1879+ "rank": 3
1880+ },
1881+ {
1882+ "name": "Lightning Cloak",
1883+ "rank": 4
1884+ },
1885+ {
1886+ "name": "Seventh Edge",
1887+ "rank": 5
1888+ },
1889+ {
1890+ "name": "Shadowrunner",
1891+ "rank": 6
1892+ },
1893+ {
1894+ "name": "Shooting Star",
1895+ "rank": 7
1896+ },
1897+ {
1898+ "name": "Thirsty Edge",
1899+ "rank": 8
1900+ },
1901+ {
1902+ "name": "Killing Machine",
1903+ "rank": 9
1904+ },
1905+ {
1906+ "name": "Gravity Lunge",
1907+ "rank": 10
1908+ },
1909+ {
1910+ "name": "Electric Surge",
1911+ "rank": 11
1912+ },
1913+ {
1914+ "name": "Astral Protection",
1915+ "rank": 12
1916+ },
1917+ {
1918+ "name": "Hundred Shells",
1919+ "rank": 13
1920+ }
1921+ ],
1922+ "skills": [
1923+ {
1924+ "name": "Agile Gunslinger",
1925+ "rank": 7
1926+ },
1927+ {
1928+ "name": "Boosted Bullets",
1929+ "rank": 9
1930+ },
1931+ {
1932+ "name": "High Tension",
1933+ "rank": 11
1934+ },
1935+ {
1936+ "name": "Mechanoid Slayer",
1937+ "rank": 13
1938+ },
1939+ {
1940+ "name": "Trigger Happy",
1941+ "rank": 14
1942+ },
1943+ {
1944+ "name": "Aura Assault",
1945+ "rank": 15
1946+ },
1947+ {
1948+ "name": "Lifeline",
1949+ "rank": 16
1950+ },
1951+ {
1952+ "name": "Hellhound",
1953+ "rank": 17
1954+ }
1955+ ],
1956+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Murderess%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Murderess%2FGameplay&prop=text&format=json",
1957+ "strategy": "jaguar",
1958+ "capabilities": {
1959+ "tank": 0,
1960+ "support": 0,
1961+ "damage": 3,
1962+ "control": 2
1963+ }
1964+ },
1965+ {
1966+ "name": "Nagi",
1967+ "className": "Duelist+",
1968+ "ranged": "Gatling Gun",
1969+ "melee": "Longsword",
1970+ "startLevel": 33,
1971+ "startRank": 4,
1972+ "maxRank": 20,
1973+ "skillSlots": 5,
1974+ "defaultArts": [
1975+ "True Stream Edge",
1976+ "Cool Off",
1977+ "Thermal Payload",
1978+ "Enhanced Stand"
1979+ ],
1980+ "arts": [
1981+ {
1982+ "name": "Rising Blade",
1983+ "rank": 1
1984+ },
1985+ {
1986+ "name": "Enhanced Stand",
1987+ "rank": 1
1988+ },
1989+ {
1990+ "name": "Thermal Payload",
1991+ "rank": 2
1992+ },
1993+ {
1994+ "name": "Cool Off",
1995+ "rank": 3
1996+ },
1997+ {
1998+ "name": "True Stream Edge",
1999+ "rank": 4
2000+ },
2001+ {
2002+ "name": "Magnum Edge",
2003+ "rank": 5
2004+ },
2005+ {
2006+ "name": "Bullet Storm",
2007+ "rank": 6
2008+ },
2009+ {
2010+ "name": "Defensive Stance",
2011+ "rank": 7
2012+ },
2013+ {
2014+ "name": "Offensive Stance",
2015+ "rank": 8
2016+ },
2017+ {
2018+ "name": "Burning Slash",
2019+ "rank": 9
2020+ },
2021+ {
2022+ "name": "Blossom Dance",
2023+ "rank": 10
2024+ },
2025+ {
2026+ "name": "Samurai Soul",
2027+ "rank": 11
2028+ },
2029+ {
2030+ "name": "Missile Volley",
2031+ "rank": 12
2032+ },
2033+ {
2034+ "name": "Incendiary Edge",
2035+ "rank": 13
2036+ }
2037+ ],
2038+ "skills": [
2039+ {
2040+ "name": "Steel Flesh",
2041+ "rank": 7
2042+ },
2043+ {
2044+ "name": "Mighty Muscle",
2045+ "rank": 9
2046+ },
2047+ {
2048+ "name": "Trauma Tension",
2049+ "rank": 11
2050+ },
2051+ {
2052+ "name": "Rising Renewal",
2053+ "rank": 13
2054+ },
2055+ {
2056+ "name": "Yamato Spirit",
2057+ "rank": 14
2058+ },
2059+ {
2060+ "name": "Fortified Flesh",
2061+ "rank": 15
2062+ },
2063+ {
2064+ "name": "Machine Gunner",
2065+ "rank": 16
2066+ },
2067+ {
2068+ "name": "Grand Procession",
2069+ "rank": 17
2070+ }
2071+ ],
2072+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Nagi%2FGameplay&section=3&prop=text&format=json",
2073+ "strategy": "duelist",
2074+ "capabilities": {
2075+ "tank": 2,
2076+ "support": 1,
2077+ "damage": 3,
2078+ "control": 2
2079+ }
2080+ },
2081+ {
2082+ "name": "Phog",
2083+ "className": "Winged Viper+",
2084+ "ranged": "Dual Guns",
2085+ "melee": "Dual Swords",
2086+ "startLevel": 15,
2087+ "startRank": 3,
2088+ "maxRank": 20,
2089+ "skillSlots": 3,
2090+ "defaultArts": [
2091+ "Back Slash",
2092+ "Upper Hand",
2093+ "Sky High",
2094+ "Sliding Slinger"
2095+ ],
2096+ "arts": [
2097+ {
2098+ "name": "Back Slash",
2099+ "rank": 1
2100+ },
2101+ {
2102+ "name": "Sliding Slinger",
2103+ "rank": 1
2104+ },
2105+ {
2106+ "name": "Upper Hand",
2107+ "rank": 2
2108+ },
2109+ {
2110+ "name": "Sky High",
2111+ "rank": 3
2112+ },
2113+ {
2114+ "name": "Shadowrunner",
2115+ "rank": 4
2116+ },
2117+ {
2118+ "name": "Side Slash",
2119+ "rank": 5
2120+ },
2121+ {
2122+ "name": "Stream Edge",
2123+ "rank": 6
2124+ },
2125+ {
2126+ "name": "Primer",
2127+ "rank": 7
2128+ },
2129+ {
2130+ "name": "Early Bird",
2131+ "rank": 8
2132+ },
2133+ {
2134+ "name": "Electric Surge",
2135+ "rank": 9
2136+ },
2137+ {
2138+ "name": "Executioner",
2139+ "rank": 10
2140+ },
2141+ {
2142+ "name": "Ghostwalker",
2143+ "rank": 11
2144+ },
2145+ {
2146+ "name": "Crisis Zone",
2147+ "rank": 12
2148+ },
2149+ {
2150+ "name": "Blood Sacrifice",
2151+ "rank": 13
2152+ },
2153+ {
2154+ "name": "Combat Limbo",
2155+ "rank": 14
2156+ },
2157+ {
2158+ "name": "Hundred Shells",
2159+ "rank": 15
2160+ }
2161+ ],
2162+ "skills": [
2163+ {
2164+ "name": "Agile Gunslinger",
2165+ "rank": 7
2166+ },
2167+ {
2168+ "name": "Steady Hand",
2169+ "rank": 9
2170+ },
2171+ {
2172+ "name": "Background Noise",
2173+ "rank": 11
2174+ },
2175+ {
2176+ "name": "Master Edge",
2177+ "rank": 13
2178+ },
2179+ {
2180+ "name": "Mortal Enemy",
2181+ "rank": 15
2182+ },
2183+ {
2184+ "name": "Hellhound",
2185+ "rank": 16
2186+ },
2187+ {
2188+ "name": "Crisis Catalyst",
2189+ "rank": 17
2190+ },
2191+ {
2192+ "name": "Phantom Counter",
2193+ "rank": 18
2194+ }
2195+ ],
2196+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Phog%2FGameplay&section=6&prop=text&format=json",
2197+ "strategy": "jaguar",
2198+ "capabilities": {
2199+ "tank": 1,
2200+ "support": 1,
2201+ "damage": 3,
2202+ "control": 1
2203+ }
2204+ },
2205+ {
2206+ "name": "Yelv",
2207+ "className": "Blast Fencer+",
2208+ "ranged": "Raygun",
2209+ "melee": "Photon Saber",
2210+ "startLevel": 14,
2211+ "startRank": 3,
2212+ "maxRank": 20,
2213+ "skillSlots": 3,
2214+ "defaultArts": [
2215+ "Starfall Blade",
2216+ "Starfall Rondo",
2217+ "Gravity Cloak",
2218+ "Beam Barrage"
2219+ ],
2220+ "arts": [
2221+ {
2222+ "name": "Starfall Blade",
2223+ "rank": 1
2224+ },
2225+ {
2226+ "name": "Beam Barrage",
2227+ "rank": 1
2228+ },
2229+ {
2230+ "name": "Starfall Rondo",
2231+ "rank": 2
2232+ },
2233+ {
2234+ "name": "Gravity Cloak",
2235+ "rank": 3
2236+ },
2237+ {
2238+ "name": "Geolibrium",
2239+ "rank": 4
2240+ },
2241+ {
2242+ "name": "Essence Exchange",
2243+ "rank": 5
2244+ },
2245+ {
2246+ "name": "Ether Blast",
2247+ "rank": 6
2248+ },
2249+ {
2250+ "name": "Myopic Screen",
2251+ "rank": 7
2252+ },
2253+ {
2254+ "name": "Astrolibrium",
2255+ "rank": 8
2256+ },
2257+ {
2258+ "name": "Astral Heal",
2259+ "rank": 9
2260+ },
2261+ {
2262+ "name": "Starfall Blossom",
2263+ "rank": 10
2264+ },
2265+ {
2266+ "name": "Master Gunner",
2267+ "rank": 11
2268+ },
2269+ {
2270+ "name": "Subterfuge",
2271+ "rank": 12
2272+ },
2273+ {
2274+ "name": "Astral Purge",
2275+ "rank": 13
2276+ },
2277+ {
2278+ "name": "Novalibrium",
2279+ "rank": 14
2280+ },
2281+ {
2282+ "name": "Galactic Cataclysm",
2283+ "rank": 15
2284+ }
2285+ ],
2286+ "skills": [
2287+ {
2288+ "name": "Inner Search",
2289+ "rank": 7
2290+ },
2291+ {
2292+ "name": "Beam Boost",
2293+ "rank": 9
2294+ },
2295+ {
2296+ "name": "High Tension",
2297+ "rank": 11
2298+ },
2299+ {
2300+ "name": "Mechanoid Slayer",
2301+ "rank": 13
2302+ },
2303+ {
2304+ "name": "Knight's Soul",
2305+ "rank": 14
2306+ },
2307+ {
2308+ "name": "Supreme Sword",
2309+ "rank": 15
2310+ },
2311+ {
2312+ "name": "Secondary Accelerator",
2313+ "rank": 16
2314+ },
2315+ {
2316+ "name": "Synchrony",
2317+ "rank": 17
2318+ }
2319+ ],
2320+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Yelv%2FGameplay&section=3&prop=text&format=json",
2321+ "strategy": "galactic",
2322+ "capabilities": {
2323+ "tank": 1,
2324+ "support": 1,
2325+ "damage": 3,
2326+ "control": 1
2327+ }
2328+ },
2329+ {
2330+ "name": "Mia",
2331+ "className": "Psycorruptor",
2332+ "ranged": "Raygun",
2333+ "melee": "Knife",
2334+ "startLevel": 46,
2335+ "startRank": 3,
2336+ "maxRank": 20,
2337+ "skillSlots": 3,
2338+ "defaultArts": [
2339+ "Screamer",
2340+ "Clarity Ray",
2341+ "Myopic Screen",
2342+ "Beam Barrage"
2343+ ],
2344+ "arts": [
2345+ {
2346+ "name": "Screamer",
2347+ "rank": 1
2348+ },
2349+ {
2350+ "name": "Beam Barrage",
2351+ "rank": 1
2352+ },
2353+ {
2354+ "name": "Myopic Screen",
2355+ "rank": 2
2356+ },
2357+ {
2358+ "name": "Clarity Ray",
2359+ "rank": 3
2360+ },
2361+ {
2362+ "name": "Full Specs",
2363+ "rank": 4
2364+ },
2365+ {
2366+ "name": "Ether Blast",
2367+ "rank": 5
2368+ },
2369+ {
2370+ "name": "Subterfuge",
2371+ "rank": 6
2372+ },
2373+ {
2374+ "name": "Dispel",
2375+ "rank": 7
2376+ },
2377+ {
2378+ "name": "Gravity Cloak",
2379+ "rank": 8
2380+ },
2381+ {
2382+ "name": "Energy Source",
2383+ "rank": 9
2384+ },
2385+ {
2386+ "name": "Beam Bomber",
2387+ "rank": 10
2388+ },
2389+ {
2390+ "name": "Black Butterfly",
2391+ "rank": 11
2392+ },
2393+ {
2394+ "name": "Pathogen Blast",
2395+ "rank": 12
2396+ },
2397+ {
2398+ "name": "Gravity Blast",
2399+ "rank": 13
2400+ }
2401+ ],
2402+ "skills": [
2403+ {
2404+ "name": "Inner Search",
2405+ "rank": 7
2406+ },
2407+ {
2408+ "name": "Beam Boost",
2409+ "rank": 9
2410+ },
2411+ {
2412+ "name": "Beauty Sleep",
2413+ "rank": 11
2414+ },
2415+ {
2416+ "name": "Ether Boost",
2417+ "rank": 13
2418+ },
2419+ {
2420+ "name": "Extra Armor",
2421+ "rank": 14
2422+ },
2423+ {
2424+ "name": "Gravity Boost",
2425+ "rank": 15
2426+ },
2427+ {
2428+ "name": "Resistant Flesh",
2429+ "rank": 16
2430+ },
2431+ {
2432+ "name": "Tactical Analyst",
2433+ "rank": 17
2434+ }
2435+ ],
2436+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&prop=wikitext&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&section=0&prop=text&format=json ; https://www.xenoserieswiki.org/w/api.php?action=parse&page=Mia%2FGameplay&section=6&prop=text&format=json",
2437+ "strategy": "mastermind",
2438+ "capabilities": {
2439+ "tank": 0,
2440+ "support": 3,
2441+ "damage": 1,
2442+ "control": 3
2443+ }
2444+ },
2445+ {
2446+ "name": "Neilnail",
2447+ "className": "Full Metal Jaguar+",
2448+ "ranged": "Psycho Launchers",
2449+ "melee": "Dual Swords",
2450+ "startLevel": 20,
2451+ "startRank": 3,
2452+ "maxRank": 20,
2453+ "skillSlots": 4,
2454+ "defaultArts": [
2455+ "Back Slash",
2456+ "Side Slash",
2457+ "Jetstream",
2458+ "Lightning Cloak"
2459+ ],
2460+ "arts": [
2461+ {
2462+ "name": "Back Slash",
2463+ "rank": 1
2464+ },
2465+ {
2466+ "name": "Jetstream",
2467+ "rank": 1
2468+ },
2469+ {
2470+ "name": "Side Slash",
2471+ "rank": 2
2472+ },
2473+ {
2474+ "name": "Lightning Cloak",
2475+ "rank": 3
2476+ },
2477+ {
2478+ "name": "Shadowrunner",
2479+ "rank": 4
2480+ },
2481+ {
2482+ "name": "Stellar Ray",
2483+ "rank": 5
2484+ },
2485+ {
2486+ "name": "Blood Sacrifice",
2487+ "rank": 6
2488+ },
2489+ {
2490+ "name": "Shooting Star",
2491+ "rank": 7
2492+ },
2493+ {
2494+ "name": "Hundred Shells",
2495+ "rank": 8
2496+ },
2497+ {
2498+ "name": "Conduction Rise",
2499+ "rank": 9
2500+ },
2501+ {
2502+ "name": "Upper Hand",
2503+ "rank": 10
2504+ },
2505+ {
2506+ "name": "Astral Protection",
2507+ "rank": 11
2508+ },
2509+ {
2510+ "name": "Electric Surge",
2511+ "rank": 12
2512+ },
2513+ {
2514+ "name": "Heroic Tale",
2515+ "rank": 13
2516+ },
2517+ {
2518+ "name": "Starlight Kick",
2519+ "rank": 14
2520+ },
2521+ {
2522+ "name": "Thirsty Edge",
2523+ "rank": 15
2524+ }
2525+ ],
2526+ "skills": [
2527+ {
2528+ "name": "Ether Boost",
2529+ "rank": 7
2530+ },
2531+ {
2532+ "name": "Aura Assault",
2533+ "rank": 9
2534+ },
2535+ {
2536+ "name": "Knight's Soul",
2537+ "rank": 11
2538+ },
2539+ {
2540+ "name": "Supreme Sword",
2541+ "rank": 13
2542+ },
2543+ {
2544+ "name": "Buff Extender",
2545+ "rank": 14
2546+ },
2547+ {
2548+ "name": "Buff Heal",
2549+ "rank": 15
2550+ },
2551+ {
2552+ "name": "Inner Search",
2553+ "rank": 16
2554+ },
2555+ {
2556+ "name": "Fast Forward",
2557+ "rank": 17
2558+ }
2559+ ],
2560+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Neilnail%2FGameplay&prop=wikitext%7Ctext&format=json",
2561+ "strategy": "jaguar",
2562+ "capabilities": {
2563+ "tank": 1,
2564+ "support": 1,
2565+ "damage": 3,
2566+ "control": 1
2567+ }
2568+ },
2569+ {
2570+ "name": "Al",
2571+ "className": "Duelist+",
2572+ "ranged": "Sniper Rifle",
2573+ "melee": "Longsword",
2574+ "startLevel": 50,
2575+ "startRank": 3,
2576+ "maxRank": 20,
2577+ "skillSlots": 4,
2578+ "defaultArts": [
2579+ "Rising Blade",
2580+ "First Down",
2581+ "Magnum Edge",
2582+ "Eagle Eye"
2583+ ],
2584+ "arts": [
2585+ {
2586+ "name": "Rising Blade",
2587+ "rank": 1
2588+ },
2589+ {
2590+ "name": "First Down",
2591+ "rank": 1
2592+ },
2593+ {
2594+ "name": "Magnum Edge",
2595+ "rank": 2
2596+ },
2597+ {
2598+ "name": "Eagle Eye",
2599+ "rank": 3
2600+ },
2601+ {
2602+ "name": "Offensive Stance",
2603+ "rank": 4
2604+ },
2605+ {
2606+ "name": "Shrapnel",
2607+ "rank": 5
2608+ },
2609+ {
2610+ "name": "Hawkeye",
2611+ "rank": 6
2612+ },
2613+ {
2614+ "name": "Tornado Blade",
2615+ "rank": 7
2616+ },
2617+ {
2618+ "name": "Intercept",
2619+ "rank": 8
2620+ },
2621+ {
2622+ "name": "Burning Slash",
2623+ "rank": 9
2624+ },
2625+ {
2626+ "name": "Sidewinder",
2627+ "rank": 10
2628+ },
2629+ {
2630+ "name": "Hercules Blow",
2631+ "rank": 11
2632+ },
2633+ {
2634+ "name": "Ghost Sniper",
2635+ "rank": 12
2636+ },
2637+ {
2638+ "name": "Samurai Soul",
2639+ "rank": 13
2640+ },
2641+ {
2642+ "name": "Incendiary Edge",
2643+ "rank": 14
2644+ },
2645+ {
2646+ "name": "Howling Soul",
2647+ "rank": 15
2648+ }
2649+ ],
2650+ "skills": [
2651+ {
2652+ "name": "Steel Flesh",
2653+ "rank": 7
2654+ },
2655+ {
2656+ "name": "Mighty Muscle",
2657+ "rank": 9
2658+ },
2659+ {
2660+ "name": "Quick Reload",
2661+ "rank": 11
2662+ },
2663+ {
2664+ "name": "Conflagrant Edge",
2665+ "rank": 13
2666+ },
2667+ {
2668+ "name": "Healing Touch",
2669+ "rank": 14
2670+ },
2671+ {
2672+ "name": "Boosted Bullets",
2673+ "rank": 15
2674+ },
2675+ {
2676+ "name": "Dismantler",
2677+ "rank": 16
2678+ },
2679+ {
2680+ "name": "Grand Procession",
2681+ "rank": 17
2682+ }
2683+ ],
2684+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Al%2FGameplay&prop=wikitext%7Ctext&format=json",
2685+ "strategy": "duelist",
2686+ "capabilities": {
2687+ "tank": 1,
2688+ "support": 0,
2689+ "damage": 3,
2690+ "control": 1
2691+ }
2692+ }
2693+];
2694+
2695+export const companionByName = new Map(
2696+ companions.map((companion) => [companion.name, companion]),
2697+);
added src/data/i18n.ts +168 -0
new file mode 100644
@@ -0,0 +1,168 @@
1+import type { Lang } from "@/src/lib/types";
2+
3+/** Every bilingual UI string. English-only game terms stay inline in components. */
4+export interface Copy {
5+ status: string;
6+ eyebrow: string;
7+ title: string;
8+ subtitle: string;
9+ avatarLevel: string;
10+ personalRank: string;
11+ personalRankShort: string;
12+ operator: string;
13+ activeClass: string;
14+ rank: string;
15+ hierarchy: string;
16+ weapons: string;
17+ allClassRanks: string;
18+ builderHeading: string;
19+ squad: string;
20+ optional: string;
21+ autoSelect: string;
22+ manualState: string;
23+ skellProgression: string;
24+ skellLicense: string;
25+ postgameFrames: string;
26+ viewResults: string;
27+ resultsHeading: string;
28+ activeRoute: string;
29+ teamMode: string;
30+ manualPick: string;
31+ autoPick: string;
32+ noEligibleOperator: string;
33+ coverage: string;
34+ artsLoadout: string;
35+ skills: string;
36+ noLearnedArts: string;
37+ noLearnedSkills: string;
38+ heuristicStatPriority: string;
39+ amRecommended: string;
40+ planReasons: string;
41+ skellSection: string;
42+ skellAlternatives: string;
43+ skellWeapons: string;
44+ skellAugments: string;
45+ requiredPilotLevel: string;
46+ acquisition: string;
47+ reason: string;
48+ unavailable: string;
49+ skellNoLicense: string;
50+ skellLowLevel: string;
51+ methodTitle: string;
52+ methodBody: string;
53+ footerTagline: string;
54+ rankDown: string;
55+ rankUp: string;
56+ classRanksHint: string;
57+}
58+
59+export const copy: Record<Lang, Copy> = {
60+ en: {
61+ status: "SYSTEM READY",
62+ eyebrow: "BLADE // TACTICAL SYSTEM 07",
63+ title: "Team Architect",
64+ subtitle: "Create a sourced, progression-safe general-purpose recommendation for Mira—not a universal best build.",
65+ avatarLevel: "Avatar level",
66+ personalRank: "Personal class rank",
67+ personalRankShort: "RANK",
68+ operator: "Companion slot",
69+ activeClass: "Avatar active class",
70+ rank: "Active class rank",
71+ hierarchy: "Class route",
72+ weapons: "Native weapons",
73+ allClassRanks: "All class ranks",
74+ builderHeading: "Configure your deployment",
75+ squad: "Squad roster",
76+ optional: "Leave any slot on AUTO for level-eligible auto-composition",
77+ autoSelect: "AUTO SELECT",
78+ manualState: "MANUAL",
79+ skellProgression: "Skell progression",
80+ skellLicense: "Has Skell License",
81+ postgameFrames: "Postgame frame schematics",
82+ viewResults: "View live recommendation",
83+ resultsHeading: "Progression-safe general-purpose recommendation",
84+ activeRoute: "ACTIVE ROUTE",
85+ teamMode: "TEAM MODE",
86+ manualPick: "MANUAL",
87+ autoPick: "AUTO",
88+ noEligibleOperator: "No eligible companion",
89+ coverage: "NUMERIC COVERAGE",
90+ artsLoadout: "Arts",
91+ skills: "Skills",
92+ noLearnedArts: "No Arts learned for this weapon set and rank.",
93+ noLearnedSkills: "No Skills learned at this rank.",
94+ heuristicStatPriority: "HEURISTIC STAT PRIORITY",
95+ amRecommended: "RECOMMENDED AM",
96+ planReasons: "PLAN REASONS",
97+ skellSection: "SKELL",
98+ skellAlternatives: "Alternatives",
99+ skellWeapons: "Weapons",
100+ skellAugments: "Augments",
101+ requiredPilotLevel: "Required pilot level",
102+ acquisition: "Acquisition",
103+ reason: "Reason",
104+ unavailable: "FRAME UNAVAILABLE",
105+ skellNoLicense: "No frame is recommended without the Skell License.",
106+ skellLowLevel: "No frame is recommended before pilot level 20.",
107+ methodTitle: "Scope and method",
108+ methodBody: "This is a sourced, progression-safe general-purpose recommendation, not a universal best build. Only learned Arts and Skills are checked against the entered class or personal ranks; the displayed weapon compatibility is also enforced. Encounter demands, gear traits, owned inventory, affinity and signature Arts, and player execution can change the best build.",
109+ footerTagline: "Unofficial tactical companion",
110+ rankDown: "Decrease rank",
111+ rankUp: "Increase rank",
112+ classRanksHint: "Selecting a class masters its parent route and resets other branches. Lowering a rank below 10 resets its trained child classes to 0.",
113+ },
114+ fr: {
115+ status: "SYSTÈME PRÊT",
116+ eyebrow: "BLADE // SYSTÈME TACTIQUE 07",
117+ title: "Architecte d’équipe",
118+ subtitle: "Créez une recommandation généraliste sourcée et sûre pour votre progression sur Mira — pas un build universellement optimal.",
119+ avatarLevel: "Niveau de l’Avatar",
120+ personalRank: "Rang de classe personnel",
121+ personalRankShort: "RANG",
122+ operator: "Emplacement de compagnon",
123+ activeClass: "Classe active de l’Avatar",
124+ rank: "Rang de la classe active",
125+ hierarchy: "Filière de classe",
126+ weapons: "Armes natives",
127+ allClassRanks: "Rangs de toutes les classes",
128+ builderHeading: "Configurez votre déploiement",
129+ squad: "Composition de l’équipe",
130+ optional: "Laissez un emplacement sur AUTO pour une sélection éligible à son niveau",
131+ autoSelect: "SÉLECTION AUTO",
132+ manualState: "MANUEL",
133+ skellProgression: "Progression Skell",
134+ skellLicense: "Licence Skell obtenue",
135+ postgameFrames: "Schémas de frames postgame",
136+ viewResults: "Voir la recommandation en direct",
137+ resultsHeading: "Recommandation généraliste sûre pour la progression",
138+ activeRoute: "FILIÈRE ACTIVE",
139+ teamMode: "MODE D’ÉQUIPE",
140+ manualPick: "MANUEL",
141+ autoPick: "AUTO",
142+ noEligibleOperator: "Aucun compagnon éligible",
143+ coverage: "COUVERTURE CHIFFRÉE",
144+ artsLoadout: "Arts",
145+ skills: "Skills",
146+ noLearnedArts: "Aucun Art appris pour ces armes et ce rang.",
147+ noLearnedSkills: "Aucun Skill appris à ce rang.",
148+ heuristicStatPriority: "PRIORITÉ DE STATS HEURISTIQUE",
149+ amRecommended: "AM RECOMMANDÉ",
150+ planReasons: "RAISONS DU PLAN",
151+ skellSection: "SKELL",
152+ skellAlternatives: "Alternatives",
153+ skellWeapons: "Armes",
154+ skellAugments: "Augments",
155+ requiredPilotLevel: "Niveau de pilote requis",
156+ acquisition: "Acquisition",
157+ reason: "Raison",
158+ unavailable: "FRAME INDISPONIBLE",
159+ skellNoLicense: "Aucune frame n’est recommandée sans la Licence Skell.",
160+ skellLowLevel: "Aucune frame n’est recommandée avant le niveau de pilote 20.",
161+ methodTitle: "Portée et méthode",
162+ methodBody: "Il s’agit d’une recommandation généraliste sourcée et sûre pour la progression, pas d’un build universellement optimal. Seuls les Arts et Skills appris sont vérifiés selon les rangs de classe ou personnels saisis ; la compatibilité des armes affichées est aussi appliquée. La rencontre, les traits d’équipement, l’inventaire possédé, les Arts d’affinité et signature, ainsi que l’exécution du joueur peuvent changer le meilleur build.",
163+ footerTagline: "Compagnon tactique non officiel",
164+ rankDown: "Diminuer le rang",
165+ rankUp: "Augmenter le rang",
166+ classRanksHint: "Sélectionner une classe maîtrise sa filière parente et remet les autres branches à zéro. Baisser un rang sous 10 remet ses classes filles entraînées à zéro.",
167+ },
168+};
new file mode 100644
@@ -0,0 +1,168 @@
1+import type { Lang } from "@/src/lib/types";
2+
3+/** Every bilingual UI string. English-only game terms stay inline in components. */
4+export interface Copy {
5+ status: string;
6+ eyebrow: string;
7+ title: string;
8+ subtitle: string;
9+ avatarLevel: string;
10+ personalRank: string;
11+ personalRankShort: string;
12+ operator: string;
13+ activeClass: string;
14+ rank: string;
15+ hierarchy: string;
16+ weapons: string;
17+ allClassRanks: string;
18+ builderHeading: string;
19+ squad: string;
20+ optional: string;
21+ autoSelect: string;
22+ manualState: string;
23+ skellProgression: string;
24+ skellLicense: string;
25+ postgameFrames: string;
26+ viewResults: string;
27+ resultsHeading: string;
28+ activeRoute: string;
29+ teamMode: string;
30+ manualPick: string;
31+ autoPick: string;
32+ noEligibleOperator: string;
33+ coverage: string;
34+ artsLoadout: string;
35+ skills: string;
36+ noLearnedArts: string;
37+ noLearnedSkills: string;
38+ heuristicStatPriority: string;
39+ amRecommended: string;
40+ planReasons: string;
41+ skellSection: string;
42+ skellAlternatives: string;
43+ skellWeapons: string;
44+ skellAugments: string;
45+ requiredPilotLevel: string;
46+ acquisition: string;
47+ reason: string;
48+ unavailable: string;
49+ skellNoLicense: string;
50+ skellLowLevel: string;
51+ methodTitle: string;
52+ methodBody: string;
53+ footerTagline: string;
54+ rankDown: string;
55+ rankUp: string;
56+ classRanksHint: string;
57+}
58+
59+export const copy: Record<Lang, Copy> = {
60+ en: {
61+ status: "SYSTEM READY",
62+ eyebrow: "BLADE // TACTICAL SYSTEM 07",
63+ title: "Team Architect",
64+ subtitle: "Create a sourced, progression-safe general-purpose recommendation for Mira—not a universal best build.",
65+ avatarLevel: "Avatar level",
66+ personalRank: "Personal class rank",
67+ personalRankShort: "RANK",
68+ operator: "Companion slot",
69+ activeClass: "Avatar active class",
70+ rank: "Active class rank",
71+ hierarchy: "Class route",
72+ weapons: "Native weapons",
73+ allClassRanks: "All class ranks",
74+ builderHeading: "Configure your deployment",
75+ squad: "Squad roster",
76+ optional: "Leave any slot on AUTO for level-eligible auto-composition",
77+ autoSelect: "AUTO SELECT",
78+ manualState: "MANUAL",
79+ skellProgression: "Skell progression",
80+ skellLicense: "Has Skell License",
81+ postgameFrames: "Postgame frame schematics",
82+ viewResults: "View live recommendation",
83+ resultsHeading: "Progression-safe general-purpose recommendation",
84+ activeRoute: "ACTIVE ROUTE",
85+ teamMode: "TEAM MODE",
86+ manualPick: "MANUAL",
87+ autoPick: "AUTO",
88+ noEligibleOperator: "No eligible companion",
89+ coverage: "NUMERIC COVERAGE",
90+ artsLoadout: "Arts",
91+ skills: "Skills",
92+ noLearnedArts: "No Arts learned for this weapon set and rank.",
93+ noLearnedSkills: "No Skills learned at this rank.",
94+ heuristicStatPriority: "HEURISTIC STAT PRIORITY",
95+ amRecommended: "RECOMMENDED AM",
96+ planReasons: "PLAN REASONS",
97+ skellSection: "SKELL",
98+ skellAlternatives: "Alternatives",
99+ skellWeapons: "Weapons",
100+ skellAugments: "Augments",
101+ requiredPilotLevel: "Required pilot level",
102+ acquisition: "Acquisition",
103+ reason: "Reason",
104+ unavailable: "FRAME UNAVAILABLE",
105+ skellNoLicense: "No frame is recommended without the Skell License.",
106+ skellLowLevel: "No frame is recommended before pilot level 20.",
107+ methodTitle: "Scope and method",
108+ methodBody: "This is a sourced, progression-safe general-purpose recommendation, not a universal best build. Only learned Arts and Skills are checked against the entered class or personal ranks; the displayed weapon compatibility is also enforced. Encounter demands, gear traits, owned inventory, affinity and signature Arts, and player execution can change the best build.",
109+ footerTagline: "Unofficial tactical companion",
110+ rankDown: "Decrease rank",
111+ rankUp: "Increase rank",
112+ classRanksHint: "Selecting a class masters its parent route and resets other branches. Lowering a rank below 10 resets its trained child classes to 0.",
113+ },
114+ fr: {
115+ status: "SYSTÈME PRÊT",
116+ eyebrow: "BLADE // SYSTÈME TACTIQUE 07",
117+ title: "Architecte d’équipe",
118+ subtitle: "Créez une recommandation généraliste sourcée et sûre pour votre progression sur Mira — pas un build universellement optimal.",
119+ avatarLevel: "Niveau de l’Avatar",
120+ personalRank: "Rang de classe personnel",
121+ personalRankShort: "RANG",
122+ operator: "Emplacement de compagnon",
123+ activeClass: "Classe active de l’Avatar",
124+ rank: "Rang de la classe active",
125+ hierarchy: "Filière de classe",
126+ weapons: "Armes natives",
127+ allClassRanks: "Rangs de toutes les classes",
128+ builderHeading: "Configurez votre déploiement",
129+ squad: "Composition de l’équipe",
130+ optional: "Laissez un emplacement sur AUTO pour une sélection éligible à son niveau",
131+ autoSelect: "SÉLECTION AUTO",
132+ manualState: "MANUEL",
133+ skellProgression: "Progression Skell",
134+ skellLicense: "Licence Skell obtenue",
135+ postgameFrames: "Schémas de frames postgame",
136+ viewResults: "Voir la recommandation en direct",
137+ resultsHeading: "Recommandation généraliste sûre pour la progression",
138+ activeRoute: "FILIÈRE ACTIVE",
139+ teamMode: "MODE D’ÉQUIPE",
140+ manualPick: "MANUEL",
141+ autoPick: "AUTO",
142+ noEligibleOperator: "Aucun compagnon éligible",
143+ coverage: "COUVERTURE CHIFFRÉE",
144+ artsLoadout: "Arts",
145+ skills: "Skills",
146+ noLearnedArts: "Aucun Art appris pour ces armes et ce rang.",
147+ noLearnedSkills: "Aucun Skill appris à ce rang.",
148+ heuristicStatPriority: "PRIORITÉ DE STATS HEURISTIQUE",
149+ amRecommended: "AM RECOMMANDÉ",
150+ planReasons: "RAISONS DU PLAN",
151+ skellSection: "SKELL",
152+ skellAlternatives: "Alternatives",
153+ skellWeapons: "Armes",
154+ skellAugments: "Augments",
155+ requiredPilotLevel: "Niveau de pilote requis",
156+ acquisition: "Acquisition",
157+ reason: "Raison",
158+ unavailable: "FRAME INDISPONIBLE",
159+ skellNoLicense: "Aucune frame n’est recommandée sans la Licence Skell.",
160+ skellLowLevel: "Aucune frame n’est recommandée avant le niveau de pilote 20.",
161+ methodTitle: "Portée et méthode",
162+ methodBody: "Il s’agit d’une recommandation généraliste sourcée et sûre pour la progression, pas d’un build universellement optimal. Seuls les Arts et Skills appris sont vérifiés selon les rangs de classe ou personnels saisis ; la compatibilité des armes affichées est aussi appliquée. La rencontre, les traits d’équipement, l’inventaire possédé, les Arts d’affinité et signature, ainsi que l’exécution du joueur peuvent changer le meilleur build.",
163+ footerTagline: "Compagnon tactique non officiel",
164+ rankDown: "Diminuer le rang",
165+ rankUp: "Augmenter le rang",
166+ classRanksHint: "Sélectionner une classe maîtrise sa filière parente et remet les autres branches à zéro. Baisser un rang sous 10 remet ses classes filles entraînées à zéro.",
167+ },
168+};
added src/data/progression.ts +1053 -0
new file mode 100644
@@ -0,0 +1,1053 @@
1+import type { ClassProgressionRecord } from "@/src/lib/types";
2+
3+export const classProgression: readonly ClassProgressionRecord[] = [
4+ {
5+ "classId": "drifter",
6+ "skillSlots": 5,
7+ "arts": [
8+ {
9+ "name": "Flame Grenade",
10+ "weapon": "Assault Rifle",
11+ "rank": 1
12+ },
13+ {
14+ "name": "Assault Hammer",
15+ "weapon": "Assault Rifle",
16+ "rank": 1
17+ },
18+ {
19+ "name": "Chrome Armor",
20+ "weapon": "Knife",
21+ "rank": 2
22+ },
23+ {
24+ "name": "Slit Edge",
25+ "weapon": "Knife",
26+ "rank": 4
27+ },
28+ {
29+ "name": "Infuriate",
30+ "weapon": "Assault Rifle",
31+ "rank": 6
32+ },
33+ {
34+ "name": "Recuperate",
35+ "weapon": "Knife",
36+ "rank": 8
37+ }
38+ ],
39+ "skills": [],
40+ "source": "XenoSeriesWiki MediaWiki API wikitext, Drifter revision 317494: https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317494&prop=wikitext&format=json",
41+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317494&prop=wikitext&format=json"
42+ },
43+ {
44+ "classId": "striker",
45+ "skillSlots": 1,
46+ "arts": [
47+ {
48+ "name": "Rising Blade",
49+ "weapon": "Longsword",
50+ "rank": 1
51+ },
52+ {
53+ "name": "Defensive Stance",
54+ "weapon": "Longsword",
55+ "rank": 2
56+ },
57+ {
58+ "name": "Power Dive",
59+ "weapon": "Assault Rifle",
60+ "rank": 3
61+ },
62+ {
63+ "name": "Tornado Blade",
64+ "weapon": "Longsword",
65+ "rank": 4
66+ },
67+ {
68+ "name": "Furious Blast",
69+ "weapon": "Assault Rifle",
70+ "rank": 6
71+ },
72+ {
73+ "name": "Magnum Edge",
74+ "weapon": "Longsword",
75+ "rank": 8
76+ }
77+ ],
78+ "skills": [
79+ {
80+ "name": "Steel Flesh",
81+ "rank": 2
82+ },
83+ {
84+ "name": "Unwavering Courage",
85+ "rank": 3
86+ },
87+ {
88+ "name": "Flame Trigger",
89+ "rank": 5
90+ },
91+ {
92+ "name": "Mighty Muscle",
93+ "rank": 7
94+ },
95+ {
96+ "name": "Combat Presence",
97+ "rank": 9
98+ },
99+ {
100+ "name": "Dismantler",
101+ "rank": 10
102+ }
103+ ],
104+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Striker&format=json&formatversion=2",
105+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Striker&format=json&formatversion=2"
106+ },
107+ {
108+ "classId": "samurai-gunner",
109+ "skillSlots": 2,
110+ "arts": [
111+ {
112+ "name": "Offensive Stance",
113+ "weapon": "Longsword",
114+ "rank": 1
115+ },
116+ {
117+ "name": "Burst Grenade",
118+ "weapon": "Assault Rifle",
119+ "rank": 1
120+ },
121+ {
122+ "name": "Decoy Round",
123+ "weapon": "Assault Rifle",
124+ "rank": 2
125+ },
126+ {
127+ "name": "Flash Grenade",
128+ "weapon": "Assault Rifle",
129+ "rank": 3
130+ },
131+ {
132+ "name": "Medic Free",
133+ "weapon": "Assault Rifle",
134+ "rank": 4
135+ },
136+ {
137+ "name": "Assault Breaker",
138+ "weapon": "Assault Rifle",
139+ "rank": 6
140+ },
141+ {
142+ "name": "Burning Slash",
143+ "weapon": "Longsword",
144+ "rank": 8
145+ }
146+ ],
147+ "skills": [
148+ {
149+ "name": "CQC Master",
150+ "rank": 2
151+ },
152+ {
153+ "name": "Auto Melee Boost",
154+ "rank": 3
155+ },
156+ {
157+ "name": "Iron Knuckle",
158+ "rank": 4
159+ },
160+ {
161+ "name": "Healing Aura",
162+ "rank": 5
163+ },
164+ {
165+ "name": "Weapon Guard",
166+ "rank": 6
167+ },
168+ {
169+ "name": "Blazing Auto",
170+ "rank": 7
171+ },
172+ {
173+ "name": "Theroid Slayer",
174+ "rank": 9
175+ },
176+ {
177+ "name": "Yamato Spirit",
178+ "rank": 10
179+ }
180+ ],
181+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Samurai%20Gunner&format=json&formatversion=2",
182+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Samurai%20Gunner&format=json&formatversion=2"
183+ },
184+ {
185+ "classId": "duelist",
186+ "skillSlots": 3,
187+ "arts": [
188+ {
189+ "name": "Incendiary Edge",
190+ "weapon": "Longsword",
191+ "rank": 1
192+ },
193+ {
194+ "name": "Gunforce",
195+ "weapon": "Assault Rifle",
196+ "rank": 2
197+ },
198+ {
199+ "name": "Takedown Shot",
200+ "weapon": "Assault Rifle",
201+ "rank": 4
202+ },
203+ {
204+ "name": "Samurai Soul",
205+ "weapon": "Longsword",
206+ "rank": 6
207+ },
208+ {
209+ "name": "Last Stand",
210+ "weapon": "Assault Rifle",
211+ "rank": 8
212+ }
213+ ],
214+ "skills": [
215+ {
216+ "name": "Conflagrant Edge",
217+ "rank": 2
218+ },
219+ {
220+ "name": "Aggro Boost",
221+ "rank": 3
222+ },
223+ {
224+ "name": "Fortified Flesh",
225+ "rank": 5
226+ },
227+ {
228+ "name": "Grand Procession",
229+ "rank": 7
230+ }
231+ ],
232+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Duelist&format=json&formatversion=2",
233+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Duelist&format=json&formatversion=2"
234+ },
235+ {
236+ "classId": "shield-trooper",
237+ "skillSlots": 3,
238+ "arts": [
239+ {
240+ "name": "Wild Down",
241+ "weapon": "Shield",
242+ "rank": 1
243+ },
244+ {
245+ "name": "Missile Volley",
246+ "weapon": "Gatling Gun",
247+ "rank": 1
248+ },
249+ {
250+ "name": "Flame Cloak",
251+ "weapon": "Shield",
252+ "rank": 2
253+ },
254+ {
255+ "name": "Iron Prison",
256+ "weapon": "Shield",
257+ "rank": 3
258+ },
259+ {
260+ "name": "Wild Smash",
261+ "weapon": "Shield",
262+ "rank": 4
263+ },
264+ {
265+ "name": "Trash Talk",
266+ "weapon": "Shield",
267+ "rank": 5
268+ },
269+ {
270+ "name": "Bullet Storm",
271+ "weapon": "Gatling Gun",
272+ "rank": 7
273+ }
274+ ],
275+ "skills": [
276+ {
277+ "name": "Thermal Shield",
278+ "rank": 2
279+ },
280+ {
281+ "name": "Topple Topper",
282+ "rank": 3
283+ },
284+ {
285+ "name": "Shield Screen",
286+ "rank": 4
287+ },
288+ {
289+ "name": "Rising Renewal",
290+ "rank": 5
291+ },
292+ {
293+ "name": "Long Topple",
294+ "rank": 6
295+ },
296+ {
297+ "name": "Trauma Tension",
298+ "rank": 8
299+ },
300+ {
301+ "name": "Dirty Fighter",
302+ "rank": 9
303+ },
304+ {
305+ "name": "Stand Strong",
306+ "rank": 10
307+ }
308+ ],
309+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Shield%20Trooper&format=json&formatversion=2",
310+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Shield%20Trooper&format=json&formatversion=2"
311+ },
312+ {
313+ "classId": "bastion-warrior",
314+ "skillSlots": 4,
315+ "arts": [
316+ {
317+ "name": "Hellfire",
318+ "weapon": "Gatling Gun",
319+ "rank": 1
320+ },
321+ {
322+ "name": "Shield Wall",
323+ "weapon": "Shield",
324+ "rank": 2
325+ },
326+ {
327+ "name": "Enhanced Stand",
328+ "weapon": "Gatling Gun",
329+ "rank": 2
330+ },
331+ {
332+ "name": "Reality Rift",
333+ "weapon": "Shield",
334+ "rank": 3
335+ },
336+ {
337+ "name": "Thermal Payload",
338+ "weapon": "Gatling Gun",
339+ "rank": 4
340+ },
341+ {
342+ "name": "Bombardier",
343+ "weapon": "Shield",
344+ "rank": 6
345+ },
346+ {
347+ "name": "Cool Off",
348+ "weapon": "Gatling Gun",
349+ "rank": 7
350+ },
351+ {
352+ "name": "Supershield",
353+ "weapon": "Shield",
354+ "rank": 8
355+ }
356+ ],
357+ "skills": [
358+ {
359+ "name": "Machine Gunner",
360+ "rank": 2
361+ },
362+ {
363+ "name": "Heatseeker",
364+ "rank": 5
365+ },
366+ {
367+ "name": "Double Spike",
368+ "rank": 9
369+ },
370+ {
371+ "name": "Double Reflect",
372+ "rank": 10
373+ }
374+ ],
375+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Bastion%20Warrior&format=json&formatversion=2",
376+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Bastion%20Warrior&format=json&formatversion=2"
377+ },
378+ {
379+ "classId": "commando",
380+ "skillSlots": 2,
381+ "arts": [
382+ {
383+ "name": "Back Slash",
384+ "weapon": "Dual Swords",
385+ "rank": 1
386+ },
387+ {
388+ "name": "Early Bird",
389+ "weapon": "Dual Guns",
390+ "rank": 1
391+ },
392+ {
393+ "name": "Stream Edge",
394+ "weapon": "Dual Swords",
395+ "rank": 2
396+ },
397+ {
398+ "name": "Sliding Slinger",
399+ "weapon": "Dual Guns",
400+ "rank": 2
401+ },
402+ {
403+ "name": "Upper Hand",
404+ "weapon": "Dual Swords",
405+ "rank": 4
406+ },
407+ {
408+ "name": "Shadowrunner",
409+ "weapon": "Dual Swords",
410+ "rank": 6
411+ }
412+ ],
413+ "skills": [
414+ {
415+ "name": "Agile Gunslinger",
416+ "rank": 2
417+ },
418+ {
419+ "name": "Steady Hand",
420+ "rank": 3
421+ },
422+ {
423+ "name": "Boosted Bullets",
424+ "rank": 4
425+ },
426+ {
427+ "name": "Background Noise",
428+ "rank": 5
429+ },
430+ {
431+ "name": "Combo Gunner",
432+ "rank": 7
433+ },
434+ {
435+ "name": "Third Eye",
436+ "rank": 8
437+ },
438+ {
439+ "name": "Master Edge",
440+ "rank": 9
441+ },
442+ {
443+ "name": "Aura Burst",
444+ "rank": 10
445+ }
446+ ],
447+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Commando&prop=wikitext&format=json",
448+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Commando&prop=wikitext&format=json"
449+ },
450+ {
451+ "classId": "winged-viper",
452+ "skillSlots": 3,
453+ "arts": [
454+ {
455+ "name": "Side Slash",
456+ "weapon": "Dual Swords",
457+ "rank": 1
458+ },
459+ {
460+ "name": "Thirsty Edge",
461+ "weapon": "Dual Swords",
462+ "rank": 2
463+ },
464+ {
465+ "name": "Violent Streak",
466+ "weapon": "Dual Guns",
467+ "rank": 3
468+ },
469+ {
470+ "name": "Blood Sacrifice",
471+ "weapon": "Dual Swords",
472+ "rank": 4
473+ },
474+ {
475+ "name": "Killing Machine",
476+ "weapon": "Dual Swords",
477+ "rank": 6
478+ },
479+ {
480+ "name": "Primer",
481+ "weapon": "Dual Guns",
482+ "rank": 8
483+ }
484+ ],
485+ "skills": [
486+ {
487+ "name": "Deep Fang",
488+ "rank": 2
489+ },
490+ {
491+ "name": "Mortal Enemy",
492+ "rank": 3
493+ },
494+ {
495+ "name": "Trigger Happy",
496+ "rank": 5
497+ },
498+ {
499+ "name": "Lifeline",
500+ "rank": 7
501+ },
502+ {
503+ "name": "Mindscape",
504+ "rank": 9
505+ },
506+ {
507+ "name": "Hellhound",
508+ "rank": 10
509+ }
510+ ],
511+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Winged%20Viper&prop=wikitext&format=json",
512+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Winged%20Viper&prop=wikitext&format=json"
513+ },
514+ {
515+ "classId": "full-metal-jaguar",
516+ "skillSlots": 4,
517+ "arts": [
518+ {
519+ "name": "Electric Surge",
520+ "weapon": "Dual Swords",
521+ "rank": 1
522+ },
523+ {
524+ "name": "Ghostwalker",
525+ "weapon": "Dual Guns",
526+ "rank": 2
527+ },
528+ {
529+ "name": "Executioner",
530+ "weapon": "Dual Guns",
531+ "rank": 4
532+ },
533+ {
534+ "name": "Combat Limbo",
535+ "weapon": "Dual Guns",
536+ "rank": 6
537+ },
538+ {
539+ "name": "Hundred Shells",
540+ "weapon": "Dual Swords",
541+ "rank": 8
542+ }
543+ ],
544+ "skills": [
545+ {
546+ "name": "Night Vision",
547+ "rank": 2
548+ },
549+ {
550+ "name": "Zero Lapse",
551+ "rank": 3
552+ },
553+ {
554+ "name": "Red Zone",
555+ "rank": 5
556+ },
557+ {
558+ "name": "Crisis Catalyst",
559+ "rank": 7
560+ },
561+ {
562+ "name": "Blood Carnival",
563+ "rank": 9
564+ },
565+ {
566+ "name": "Phantom Counter",
567+ "rank": 10
568+ }
569+ ],
570+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Full%20Metal%20Jaguar%20(XCX)&prop=wikitext&format=json",
571+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Full%20Metal%20Jaguar%20(XCX)&prop=wikitext&format=json"
572+ },
573+ {
574+ "classId": "partisan-eagle",
575+ "skillSlots": 3,
576+ "arts": [
577+ {
578+ "name": "Arcing Horn",
579+ "weapon": "Javelin",
580+ "rank": 1
581+ },
582+ {
583+ "name": "Shrapnel",
584+ "weapon": "Sniper Rifle",
585+ "rank": 1
586+ },
587+ {
588+ "name": "Eagle Eye",
589+ "weapon": "Sniper Rifle",
590+ "rank": 2
591+ },
592+ {
593+ "name": "Raijin",
594+ "weapon": "Javelin",
595+ "rank": 3
596+ },
597+ {
598+ "name": "First Down",
599+ "weapon": "Sniper Rifle",
600+ "rank": 4
601+ },
602+ {
603+ "name": "Spiral Horn",
604+ "weapon": "Javelin",
605+ "rank": 6
606+ },
607+ {
608+ "name": "Intercept",
609+ "weapon": "Sniper Rifle",
610+ "rank": 8
611+ }
612+ ],
613+ "skills": [
614+ {
615+ "name": "Killshot",
616+ "rank": 2
617+ },
618+ {
619+ "name": "Electric Guard",
620+ "rank": 3
621+ },
622+ {
623+ "name": "Electric Boost",
624+ "rank": 5
625+ },
626+ {
627+ "name": "Knock 'n' Shock",
628+ "rank": 7
629+ },
630+ {
631+ "name": "Fleet Feet",
632+ "rank": 9
633+ },
634+ {
635+ "name": "Piscinoid Slayer",
636+ "rank": 10
637+ }
638+ ],
639+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Partisan%20Eagle&prop=wikitext&format=json",
640+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Partisan%20Eagle&prop=wikitext&format=json"
641+ },
642+ {
643+ "classId": "astral-crusader",
644+ "skillSlots": 4,
645+ "arts": [
646+ {
647+ "name": "Overwhelm",
648+ "weapon": "Javelin",
649+ "rank": 1
650+ },
651+ {
652+ "name": "Hawkeye",
653+ "weapon": "Sniper Rifle",
654+ "rank": 1
655+ },
656+ {
657+ "name": "Speed Demon",
658+ "weapon": "Javelin",
659+ "rank": 2
660+ },
661+ {
662+ "name": "Sidewinder",
663+ "weapon": "Sniper Rifle",
664+ "rank": 3
665+ },
666+ {
667+ "name": "Hair Trigger",
668+ "weapon": "Javelin",
669+ "rank": 4
670+ },
671+ {
672+ "name": "Ghost Sniper",
673+ "weapon": "Sniper Rifle",
674+ "rank": 6
675+ },
676+ {
677+ "name": "Trident Buster",
678+ "weapon": "Javelin",
679+ "rank": 8
680+ }
681+ ],
682+ "skills": [
683+ {
684+ "name": "Long Shot",
685+ "rank": 2
686+ },
687+ {
688+ "name": "Unstoppable",
689+ "rank": 3
690+ },
691+ {
692+ "name": "Quick Reload",
693+ "rank": 5
694+ },
695+ {
696+ "name": "Conductive Strike",
697+ "rank": 7
698+ },
699+ {
700+ "name": "Electric Flesh",
701+ "rank": 9
702+ },
703+ {
704+ "name": "TP Overdrive",
705+ "rank": 10
706+ }
707+ ],
708+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Astral%20Crusader&prop=wikitext&format=json",
709+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Astral%20Crusader&prop=wikitext&format=json"
710+ },
711+ {
712+ "classId": "enforcer",
713+ "skillSlots": 2,
714+ "arts": [
715+ {
716+ "name": "Beam Barrage",
717+ "weapon": "Raygun",
718+ "rank": 1
719+ },
720+ {
721+ "name": "Repair",
722+ "weapon": "Knife",
723+ "rank": 3
724+ },
725+ {
726+ "name": "Myopic Screen",
727+ "weapon": "Raygun",
728+ "rank": 5
729+ },
730+ {
731+ "name": "Full Specs",
732+ "weapon": "Knife",
733+ "rank": 7
734+ }
735+ ],
736+ "skills": [
737+ {
738+ "name": "Inner Search",
739+ "rank": 2
740+ },
741+ {
742+ "name": "Beam Boost",
743+ "rank": 4
744+ },
745+ {
746+ "name": "Beam Guard",
747+ "rank": 6
748+ },
749+ {
750+ "name": "Buff Heal",
751+ "rank": 8
752+ },
753+ {
754+ "name": "Healing Touch",
755+ "rank": 9
756+ },
757+ {
758+ "name": "High Tension",
759+ "rank": 10
760+ }
761+ ],
762+ "source": "XenoSeriesWiki Enforcer wikitext, revision 317497 (2025-05-18); Art names independently resolved from the page's XCX fancy link art templates through MediaWiki parse output.",
763+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317497&prop=wikitext&format=json"
764+ },
765+ {
766+ "classId": "psycorruptor",
767+ "skillSlots": 3,
768+ "arts": [
769+ {
770+ "name": "Screamer",
771+ "weapon": "Knife",
772+ "rank": 1
773+ },
774+ {
775+ "name": "Subterfuge",
776+ "weapon": "Raygun",
777+ "rank": 2
778+ },
779+ {
780+ "name": "Absorber Skin",
781+ "weapon": "Knife",
782+ "rank": 3
783+ },
784+ {
785+ "name": "Ether Blast",
786+ "weapon": "Raygun",
787+ "rank": 5
788+ },
789+ {
790+ "name": "Brainjack",
791+ "weapon": "Knife",
792+ "rank": 7
793+ }
794+ ],
795+ "skills": [
796+ {
797+ "name": "Beauty Sleep",
798+ "rank": 2
799+ },
800+ {
801+ "name": "Brain Wall",
802+ "rank": 3
803+ },
804+ {
805+ "name": "Gentle Approach",
806+ "rank": 4
807+ },
808+ {
809+ "name": "King's Decree",
810+ "rank": 5
811+ },
812+ {
813+ "name": "Extra Armor",
814+ "rank": 6
815+ },
816+ {
817+ "name": "Feather Touch",
818+ "rank": 8
819+ },
820+ {
821+ "name": "Unpleasant Dream",
822+ "rank": 9
823+ },
824+ {
825+ "name": "Core Crusher",
826+ "rank": 10
827+ }
828+ ],
829+ "source": "XenoSeriesWiki Psycorruptor wikitext, revision 316281 (2025-05-07); Art names resolved with the MediaWiki expandtemplates API.",
830+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=316281&prop=wikitext&format=json"
831+ },
832+ {
833+ "classId": "mastermind",
834+ "skillSlots": 4,
835+ "arts": [
836+ {
837+ "name": "Dispel",
838+ "weapon": "Knife",
839+ "rank": 1
840+ },
841+ {
842+ "name": "Gravity Blast",
843+ "weapon": "Raygun",
844+ "rank": 1
845+ },
846+ {
847+ "name": "Gravity Cloak",
848+ "weapon": "Raygun",
849+ "rank": 2
850+ },
851+ {
852+ "name": "Servant Sacrifice",
853+ "weapon": "Knife",
854+ "rank": 3
855+ },
856+ {
857+ "name": "Energy Source",
858+ "weapon": "Knife",
859+ "rank": 4
860+ },
861+ {
862+ "name": "Black Butterfly",
863+ "weapon": "Knife",
864+ "rank": 6
865+ },
866+ {
867+ "name": "Pathogen Blast",
868+ "weapon": "Raygun",
869+ "rank": 8
870+ }
871+ ],
872+ "skills": [
873+ {
874+ "name": "Ether Guard",
875+ "rank": 2
876+ },
877+ {
878+ "name": "Gravity Boost",
879+ "rank": 3
880+ },
881+ {
882+ "name": "Well-Weathered",
883+ "rank": 4
884+ },
885+ {
886+ "name": "Appendage Erosion",
887+ "rank": 5
888+ },
889+ {
890+ "name": "Resistant Flesh",
891+ "rank": 6
892+ },
893+ {
894+ "name": "Tactical Analyst",
895+ "rank": 7
896+ },
897+ {
898+ "name": "King's Boon",
899+ "rank": 9
900+ },
901+ {
902+ "name": "Secondary Accelerator",
903+ "rank": 10
904+ }
905+ ],
906+ "source": "XenoSeriesWiki Mastermind wikitext, revision 303831 (2025-03-07); Art names resolved with the MediaWiki expandtemplates API.",
907+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=303831&prop=wikitext&format=json"
908+ },
909+ {
910+ "classId": "blast-fencer",
911+ "skillSlots": 3,
912+ "arts": [
913+ {
914+ "name": "Starfall Blade",
915+ "weapon": "Photon Saber",
916+ "rank": 1
917+ },
918+ {
919+ "name": "Stellar Ray",
920+ "weapon": "Psycho Launchers",
921+ "rank": 1
922+ },
923+ {
924+ "name": "Geolibrium",
925+ "weapon": "Photon Saber",
926+ "rank": 2
927+ },
928+ {
929+ "name": "Lightning Cloak",
930+ "weapon": "Psycho Launchers",
931+ "rank": 2
932+ },
933+ {
934+ "name": "Starfall Rondo",
935+ "weapon": "Photon Saber",
936+ "rank": 3
937+ },
938+ {
939+ "name": "Jetstream",
940+ "weapon": "Psycho Launchers",
941+ "rank": 4
942+ },
943+ {
944+ "name": "Astrolibrium",
945+ "weapon": "Photon Saber",
946+ "rank": 6
947+ },
948+ {
949+ "name": "Shooting Star",
950+ "weapon": "Psycho Launchers",
951+ "rank": 8
952+ }
953+ ],
954+ "skills": [
955+ {
956+ "name": "Ether Boost",
957+ "rank": 2
958+ },
959+ {
960+ "name": "Mechanoid Slayer",
961+ "rank": 3
962+ },
963+ {
964+ "name": "Knight's Soul",
965+ "rank": 5
966+ },
967+ {
968+ "name": "Aura Assault",
969+ "rank": 7
970+ },
971+ {
972+ "name": "Buff Extender",
973+ "rank": 9
974+ },
975+ {
976+ "name": "Supreme Sword",
977+ "rank": 10
978+ }
979+ ],
980+ "source": "XenoSeriesWiki Blast Fencer wikitext, revision 316279 (2025-05-07); Art names resolved with the MediaWiki expandtemplates API.",
981+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=316279&prop=wikitext&format=json"
982+ },
983+ {
984+ "classId": "galactic-knight",
985+ "skillSlots": 4,
986+ "arts": [
987+ {
988+ "name": "Astral Heal",
989+ "weapon": "Photon Saber",
990+ "rank": 1
991+ },
992+ {
993+ "name": "Astral Protection",
994+ "weapon": "Psycho Launchers",
995+ "rank": 1
996+ },
997+ {
998+ "name": "Starfall Blossom",
999+ "weapon": "Photon Saber",
1000+ "rank": 2
1001+ },
1002+ {
1003+ "name": "Astral Purge",
1004+ "weapon": "Photon Saber",
1005+ "rank": 3
1006+ },
1007+ {
1008+ "name": "Novalibrium",
1009+ "weapon": "Photon Saber",
1010+ "rank": 4
1011+ },
1012+ {
1013+ "name": "Starlight Kick",
1014+ "weapon": "Psycho Launchers",
1015+ "rank": 6
1016+ },
1017+ {
1018+ "name": "Astral Horizon",
1019+ "weapon": "Photon Saber",
1020+ "rank": 7
1021+ },
1022+ {
1023+ "name": "Galactic Cataclysm",
1024+ "weapon": "Photon Saber",
1025+ "rank": 8
1026+ }
1027+ ],
1028+ "skills": [
1029+ {
1030+ "name": "Gravity Guard",
1031+ "rank": 2
1032+ },
1033+ {
1034+ "name": "Fast Forward",
1035+ "rank": 5
1036+ },
1037+ {
1038+ "name": "Stellar Entry",
1039+ "rank": 9
1040+ },
1041+ {
1042+ "name": "Synchrony",
1043+ "rank": 10
1044+ }
1045+ ],
1046+ "source": "XenoSeriesWiki Galactic Knight wikitext, revision 303830 (2025-03-07); Art names resolved with the MediaWiki expandtemplates API.",
1047+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=303830&prop=wikitext&format=json"
1048+ }
1049+];
1050+
1051+export const classProgressionById = new Map(
1052+ classProgression.map((record) => [record.classId, record]),
1053+);
new file mode 100644
@@ -0,0 +1,1053 @@
1+import type { ClassProgressionRecord } from "@/src/lib/types";
2+
3+export const classProgression: readonly ClassProgressionRecord[] = [
4+ {
5+ "classId": "drifter",
6+ "skillSlots": 5,
7+ "arts": [
8+ {
9+ "name": "Flame Grenade",
10+ "weapon": "Assault Rifle",
11+ "rank": 1
12+ },
13+ {
14+ "name": "Assault Hammer",
15+ "weapon": "Assault Rifle",
16+ "rank": 1
17+ },
18+ {
19+ "name": "Chrome Armor",
20+ "weapon": "Knife",
21+ "rank": 2
22+ },
23+ {
24+ "name": "Slit Edge",
25+ "weapon": "Knife",
26+ "rank": 4
27+ },
28+ {
29+ "name": "Infuriate",
30+ "weapon": "Assault Rifle",
31+ "rank": 6
32+ },
33+ {
34+ "name": "Recuperate",
35+ "weapon": "Knife",
36+ "rank": 8
37+ }
38+ ],
39+ "skills": [],
40+ "source": "XenoSeriesWiki MediaWiki API wikitext, Drifter revision 317494: https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317494&prop=wikitext&format=json",
41+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317494&prop=wikitext&format=json"
42+ },
43+ {
44+ "classId": "striker",
45+ "skillSlots": 1,
46+ "arts": [
47+ {
48+ "name": "Rising Blade",
49+ "weapon": "Longsword",
50+ "rank": 1
51+ },
52+ {
53+ "name": "Defensive Stance",
54+ "weapon": "Longsword",
55+ "rank": 2
56+ },
57+ {
58+ "name": "Power Dive",
59+ "weapon": "Assault Rifle",
60+ "rank": 3
61+ },
62+ {
63+ "name": "Tornado Blade",
64+ "weapon": "Longsword",
65+ "rank": 4
66+ },
67+ {
68+ "name": "Furious Blast",
69+ "weapon": "Assault Rifle",
70+ "rank": 6
71+ },
72+ {
73+ "name": "Magnum Edge",
74+ "weapon": "Longsword",
75+ "rank": 8
76+ }
77+ ],
78+ "skills": [
79+ {
80+ "name": "Steel Flesh",
81+ "rank": 2
82+ },
83+ {
84+ "name": "Unwavering Courage",
85+ "rank": 3
86+ },
87+ {
88+ "name": "Flame Trigger",
89+ "rank": 5
90+ },
91+ {
92+ "name": "Mighty Muscle",
93+ "rank": 7
94+ },
95+ {
96+ "name": "Combat Presence",
97+ "rank": 9
98+ },
99+ {
100+ "name": "Dismantler",
101+ "rank": 10
102+ }
103+ ],
104+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Striker&format=json&formatversion=2",
105+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Striker&format=json&formatversion=2"
106+ },
107+ {
108+ "classId": "samurai-gunner",
109+ "skillSlots": 2,
110+ "arts": [
111+ {
112+ "name": "Offensive Stance",
113+ "weapon": "Longsword",
114+ "rank": 1
115+ },
116+ {
117+ "name": "Burst Grenade",
118+ "weapon": "Assault Rifle",
119+ "rank": 1
120+ },
121+ {
122+ "name": "Decoy Round",
123+ "weapon": "Assault Rifle",
124+ "rank": 2
125+ },
126+ {
127+ "name": "Flash Grenade",
128+ "weapon": "Assault Rifle",
129+ "rank": 3
130+ },
131+ {
132+ "name": "Medic Free",
133+ "weapon": "Assault Rifle",
134+ "rank": 4
135+ },
136+ {
137+ "name": "Assault Breaker",
138+ "weapon": "Assault Rifle",
139+ "rank": 6
140+ },
141+ {
142+ "name": "Burning Slash",
143+ "weapon": "Longsword",
144+ "rank": 8
145+ }
146+ ],
147+ "skills": [
148+ {
149+ "name": "CQC Master",
150+ "rank": 2
151+ },
152+ {
153+ "name": "Auto Melee Boost",
154+ "rank": 3
155+ },
156+ {
157+ "name": "Iron Knuckle",
158+ "rank": 4
159+ },
160+ {
161+ "name": "Healing Aura",
162+ "rank": 5
163+ },
164+ {
165+ "name": "Weapon Guard",
166+ "rank": 6
167+ },
168+ {
169+ "name": "Blazing Auto",
170+ "rank": 7
171+ },
172+ {
173+ "name": "Theroid Slayer",
174+ "rank": 9
175+ },
176+ {
177+ "name": "Yamato Spirit",
178+ "rank": 10
179+ }
180+ ],
181+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Samurai%20Gunner&format=json&formatversion=2",
182+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Samurai%20Gunner&format=json&formatversion=2"
183+ },
184+ {
185+ "classId": "duelist",
186+ "skillSlots": 3,
187+ "arts": [
188+ {
189+ "name": "Incendiary Edge",
190+ "weapon": "Longsword",
191+ "rank": 1
192+ },
193+ {
194+ "name": "Gunforce",
195+ "weapon": "Assault Rifle",
196+ "rank": 2
197+ },
198+ {
199+ "name": "Takedown Shot",
200+ "weapon": "Assault Rifle",
201+ "rank": 4
202+ },
203+ {
204+ "name": "Samurai Soul",
205+ "weapon": "Longsword",
206+ "rank": 6
207+ },
208+ {
209+ "name": "Last Stand",
210+ "weapon": "Assault Rifle",
211+ "rank": 8
212+ }
213+ ],
214+ "skills": [
215+ {
216+ "name": "Conflagrant Edge",
217+ "rank": 2
218+ },
219+ {
220+ "name": "Aggro Boost",
221+ "rank": 3
222+ },
223+ {
224+ "name": "Fortified Flesh",
225+ "rank": 5
226+ },
227+ {
228+ "name": "Grand Procession",
229+ "rank": 7
230+ }
231+ ],
232+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Duelist&format=json&formatversion=2",
233+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Duelist&format=json&formatversion=2"
234+ },
235+ {
236+ "classId": "shield-trooper",
237+ "skillSlots": 3,
238+ "arts": [
239+ {
240+ "name": "Wild Down",
241+ "weapon": "Shield",
242+ "rank": 1
243+ },
244+ {
245+ "name": "Missile Volley",
246+ "weapon": "Gatling Gun",
247+ "rank": 1
248+ },
249+ {
250+ "name": "Flame Cloak",
251+ "weapon": "Shield",
252+ "rank": 2
253+ },
254+ {
255+ "name": "Iron Prison",
256+ "weapon": "Shield",
257+ "rank": 3
258+ },
259+ {
260+ "name": "Wild Smash",
261+ "weapon": "Shield",
262+ "rank": 4
263+ },
264+ {
265+ "name": "Trash Talk",
266+ "weapon": "Shield",
267+ "rank": 5
268+ },
269+ {
270+ "name": "Bullet Storm",
271+ "weapon": "Gatling Gun",
272+ "rank": 7
273+ }
274+ ],
275+ "skills": [
276+ {
277+ "name": "Thermal Shield",
278+ "rank": 2
279+ },
280+ {
281+ "name": "Topple Topper",
282+ "rank": 3
283+ },
284+ {
285+ "name": "Shield Screen",
286+ "rank": 4
287+ },
288+ {
289+ "name": "Rising Renewal",
290+ "rank": 5
291+ },
292+ {
293+ "name": "Long Topple",
294+ "rank": 6
295+ },
296+ {
297+ "name": "Trauma Tension",
298+ "rank": 8
299+ },
300+ {
301+ "name": "Dirty Fighter",
302+ "rank": 9
303+ },
304+ {
305+ "name": "Stand Strong",
306+ "rank": 10
307+ }
308+ ],
309+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Shield%20Trooper&format=json&formatversion=2",
310+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Shield%20Trooper&format=json&formatversion=2"
311+ },
312+ {
313+ "classId": "bastion-warrior",
314+ "skillSlots": 4,
315+ "arts": [
316+ {
317+ "name": "Hellfire",
318+ "weapon": "Gatling Gun",
319+ "rank": 1
320+ },
321+ {
322+ "name": "Shield Wall",
323+ "weapon": "Shield",
324+ "rank": 2
325+ },
326+ {
327+ "name": "Enhanced Stand",
328+ "weapon": "Gatling Gun",
329+ "rank": 2
330+ },
331+ {
332+ "name": "Reality Rift",
333+ "weapon": "Shield",
334+ "rank": 3
335+ },
336+ {
337+ "name": "Thermal Payload",
338+ "weapon": "Gatling Gun",
339+ "rank": 4
340+ },
341+ {
342+ "name": "Bombardier",
343+ "weapon": "Shield",
344+ "rank": 6
345+ },
346+ {
347+ "name": "Cool Off",
348+ "weapon": "Gatling Gun",
349+ "rank": 7
350+ },
351+ {
352+ "name": "Supershield",
353+ "weapon": "Shield",
354+ "rank": 8
355+ }
356+ ],
357+ "skills": [
358+ {
359+ "name": "Machine Gunner",
360+ "rank": 2
361+ },
362+ {
363+ "name": "Heatseeker",
364+ "rank": 5
365+ },
366+ {
367+ "name": "Double Spike",
368+ "rank": 9
369+ },
370+ {
371+ "name": "Double Reflect",
372+ "rank": 10
373+ }
374+ ],
375+ "source": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Bastion%20Warrior&format=json&formatversion=2",
376+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&titles=Bastion%20Warrior&format=json&formatversion=2"
377+ },
378+ {
379+ "classId": "commando",
380+ "skillSlots": 2,
381+ "arts": [
382+ {
383+ "name": "Back Slash",
384+ "weapon": "Dual Swords",
385+ "rank": 1
386+ },
387+ {
388+ "name": "Early Bird",
389+ "weapon": "Dual Guns",
390+ "rank": 1
391+ },
392+ {
393+ "name": "Stream Edge",
394+ "weapon": "Dual Swords",
395+ "rank": 2
396+ },
397+ {
398+ "name": "Sliding Slinger",
399+ "weapon": "Dual Guns",
400+ "rank": 2
401+ },
402+ {
403+ "name": "Upper Hand",
404+ "weapon": "Dual Swords",
405+ "rank": 4
406+ },
407+ {
408+ "name": "Shadowrunner",
409+ "weapon": "Dual Swords",
410+ "rank": 6
411+ }
412+ ],
413+ "skills": [
414+ {
415+ "name": "Agile Gunslinger",
416+ "rank": 2
417+ },
418+ {
419+ "name": "Steady Hand",
420+ "rank": 3
421+ },
422+ {
423+ "name": "Boosted Bullets",
424+ "rank": 4
425+ },
426+ {
427+ "name": "Background Noise",
428+ "rank": 5
429+ },
430+ {
431+ "name": "Combo Gunner",
432+ "rank": 7
433+ },
434+ {
435+ "name": "Third Eye",
436+ "rank": 8
437+ },
438+ {
439+ "name": "Master Edge",
440+ "rank": 9
441+ },
442+ {
443+ "name": "Aura Burst",
444+ "rank": 10
445+ }
446+ ],
447+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Commando&prop=wikitext&format=json",
448+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Commando&prop=wikitext&format=json"
449+ },
450+ {
451+ "classId": "winged-viper",
452+ "skillSlots": 3,
453+ "arts": [
454+ {
455+ "name": "Side Slash",
456+ "weapon": "Dual Swords",
457+ "rank": 1
458+ },
459+ {
460+ "name": "Thirsty Edge",
461+ "weapon": "Dual Swords",
462+ "rank": 2
463+ },
464+ {
465+ "name": "Violent Streak",
466+ "weapon": "Dual Guns",
467+ "rank": 3
468+ },
469+ {
470+ "name": "Blood Sacrifice",
471+ "weapon": "Dual Swords",
472+ "rank": 4
473+ },
474+ {
475+ "name": "Killing Machine",
476+ "weapon": "Dual Swords",
477+ "rank": 6
478+ },
479+ {
480+ "name": "Primer",
481+ "weapon": "Dual Guns",
482+ "rank": 8
483+ }
484+ ],
485+ "skills": [
486+ {
487+ "name": "Deep Fang",
488+ "rank": 2
489+ },
490+ {
491+ "name": "Mortal Enemy",
492+ "rank": 3
493+ },
494+ {
495+ "name": "Trigger Happy",
496+ "rank": 5
497+ },
498+ {
499+ "name": "Lifeline",
500+ "rank": 7
501+ },
502+ {
503+ "name": "Mindscape",
504+ "rank": 9
505+ },
506+ {
507+ "name": "Hellhound",
508+ "rank": 10
509+ }
510+ ],
511+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Winged%20Viper&prop=wikitext&format=json",
512+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Winged%20Viper&prop=wikitext&format=json"
513+ },
514+ {
515+ "classId": "full-metal-jaguar",
516+ "skillSlots": 4,
517+ "arts": [
518+ {
519+ "name": "Electric Surge",
520+ "weapon": "Dual Swords",
521+ "rank": 1
522+ },
523+ {
524+ "name": "Ghostwalker",
525+ "weapon": "Dual Guns",
526+ "rank": 2
527+ },
528+ {
529+ "name": "Executioner",
530+ "weapon": "Dual Guns",
531+ "rank": 4
532+ },
533+ {
534+ "name": "Combat Limbo",
535+ "weapon": "Dual Guns",
536+ "rank": 6
537+ },
538+ {
539+ "name": "Hundred Shells",
540+ "weapon": "Dual Swords",
541+ "rank": 8
542+ }
543+ ],
544+ "skills": [
545+ {
546+ "name": "Night Vision",
547+ "rank": 2
548+ },
549+ {
550+ "name": "Zero Lapse",
551+ "rank": 3
552+ },
553+ {
554+ "name": "Red Zone",
555+ "rank": 5
556+ },
557+ {
558+ "name": "Crisis Catalyst",
559+ "rank": 7
560+ },
561+ {
562+ "name": "Blood Carnival",
563+ "rank": 9
564+ },
565+ {
566+ "name": "Phantom Counter",
567+ "rank": 10
568+ }
569+ ],
570+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Full%20Metal%20Jaguar%20(XCX)&prop=wikitext&format=json",
571+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Full%20Metal%20Jaguar%20(XCX)&prop=wikitext&format=json"
572+ },
573+ {
574+ "classId": "partisan-eagle",
575+ "skillSlots": 3,
576+ "arts": [
577+ {
578+ "name": "Arcing Horn",
579+ "weapon": "Javelin",
580+ "rank": 1
581+ },
582+ {
583+ "name": "Shrapnel",
584+ "weapon": "Sniper Rifle",
585+ "rank": 1
586+ },
587+ {
588+ "name": "Eagle Eye",
589+ "weapon": "Sniper Rifle",
590+ "rank": 2
591+ },
592+ {
593+ "name": "Raijin",
594+ "weapon": "Javelin",
595+ "rank": 3
596+ },
597+ {
598+ "name": "First Down",
599+ "weapon": "Sniper Rifle",
600+ "rank": 4
601+ },
602+ {
603+ "name": "Spiral Horn",
604+ "weapon": "Javelin",
605+ "rank": 6
606+ },
607+ {
608+ "name": "Intercept",
609+ "weapon": "Sniper Rifle",
610+ "rank": 8
611+ }
612+ ],
613+ "skills": [
614+ {
615+ "name": "Killshot",
616+ "rank": 2
617+ },
618+ {
619+ "name": "Electric Guard",
620+ "rank": 3
621+ },
622+ {
623+ "name": "Electric Boost",
624+ "rank": 5
625+ },
626+ {
627+ "name": "Knock 'n' Shock",
628+ "rank": 7
629+ },
630+ {
631+ "name": "Fleet Feet",
632+ "rank": 9
633+ },
634+ {
635+ "name": "Piscinoid Slayer",
636+ "rank": 10
637+ }
638+ ],
639+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Partisan%20Eagle&prop=wikitext&format=json",
640+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Partisan%20Eagle&prop=wikitext&format=json"
641+ },
642+ {
643+ "classId": "astral-crusader",
644+ "skillSlots": 4,
645+ "arts": [
646+ {
647+ "name": "Overwhelm",
648+ "weapon": "Javelin",
649+ "rank": 1
650+ },
651+ {
652+ "name": "Hawkeye",
653+ "weapon": "Sniper Rifle",
654+ "rank": 1
655+ },
656+ {
657+ "name": "Speed Demon",
658+ "weapon": "Javelin",
659+ "rank": 2
660+ },
661+ {
662+ "name": "Sidewinder",
663+ "weapon": "Sniper Rifle",
664+ "rank": 3
665+ },
666+ {
667+ "name": "Hair Trigger",
668+ "weapon": "Javelin",
669+ "rank": 4
670+ },
671+ {
672+ "name": "Ghost Sniper",
673+ "weapon": "Sniper Rifle",
674+ "rank": 6
675+ },
676+ {
677+ "name": "Trident Buster",
678+ "weapon": "Javelin",
679+ "rank": 8
680+ }
681+ ],
682+ "skills": [
683+ {
684+ "name": "Long Shot",
685+ "rank": 2
686+ },
687+ {
688+ "name": "Unstoppable",
689+ "rank": 3
690+ },
691+ {
692+ "name": "Quick Reload",
693+ "rank": 5
694+ },
695+ {
696+ "name": "Conductive Strike",
697+ "rank": 7
698+ },
699+ {
700+ "name": "Electric Flesh",
701+ "rank": 9
702+ },
703+ {
704+ "name": "TP Overdrive",
705+ "rank": 10
706+ }
707+ ],
708+ "source": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Astral%20Crusader&prop=wikitext&format=json",
709+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Astral%20Crusader&prop=wikitext&format=json"
710+ },
711+ {
712+ "classId": "enforcer",
713+ "skillSlots": 2,
714+ "arts": [
715+ {
716+ "name": "Beam Barrage",
717+ "weapon": "Raygun",
718+ "rank": 1
719+ },
720+ {
721+ "name": "Repair",
722+ "weapon": "Knife",
723+ "rank": 3
724+ },
725+ {
726+ "name": "Myopic Screen",
727+ "weapon": "Raygun",
728+ "rank": 5
729+ },
730+ {
731+ "name": "Full Specs",
732+ "weapon": "Knife",
733+ "rank": 7
734+ }
735+ ],
736+ "skills": [
737+ {
738+ "name": "Inner Search",
739+ "rank": 2
740+ },
741+ {
742+ "name": "Beam Boost",
743+ "rank": 4
744+ },
745+ {
746+ "name": "Beam Guard",
747+ "rank": 6
748+ },
749+ {
750+ "name": "Buff Heal",
751+ "rank": 8
752+ },
753+ {
754+ "name": "Healing Touch",
755+ "rank": 9
756+ },
757+ {
758+ "name": "High Tension",
759+ "rank": 10
760+ }
761+ ],
762+ "source": "XenoSeriesWiki Enforcer wikitext, revision 317497 (2025-05-18); Art names independently resolved from the page's XCX fancy link art templates through MediaWiki parse output.",
763+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=317497&prop=wikitext&format=json"
764+ },
765+ {
766+ "classId": "psycorruptor",
767+ "skillSlots": 3,
768+ "arts": [
769+ {
770+ "name": "Screamer",
771+ "weapon": "Knife",
772+ "rank": 1
773+ },
774+ {
775+ "name": "Subterfuge",
776+ "weapon": "Raygun",
777+ "rank": 2
778+ },
779+ {
780+ "name": "Absorber Skin",
781+ "weapon": "Knife",
782+ "rank": 3
783+ },
784+ {
785+ "name": "Ether Blast",
786+ "weapon": "Raygun",
787+ "rank": 5
788+ },
789+ {
790+ "name": "Brainjack",
791+ "weapon": "Knife",
792+ "rank": 7
793+ }
794+ ],
795+ "skills": [
796+ {
797+ "name": "Beauty Sleep",
798+ "rank": 2
799+ },
800+ {
801+ "name": "Brain Wall",
802+ "rank": 3
803+ },
804+ {
805+ "name": "Gentle Approach",
806+ "rank": 4
807+ },
808+ {
809+ "name": "King's Decree",
810+ "rank": 5
811+ },
812+ {
813+ "name": "Extra Armor",
814+ "rank": 6
815+ },
816+ {
817+ "name": "Feather Touch",
818+ "rank": 8
819+ },
820+ {
821+ "name": "Unpleasant Dream",
822+ "rank": 9
823+ },
824+ {
825+ "name": "Core Crusher",
826+ "rank": 10
827+ }
828+ ],
829+ "source": "XenoSeriesWiki Psycorruptor wikitext, revision 316281 (2025-05-07); Art names resolved with the MediaWiki expandtemplates API.",
830+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=316281&prop=wikitext&format=json"
831+ },
832+ {
833+ "classId": "mastermind",
834+ "skillSlots": 4,
835+ "arts": [
836+ {
837+ "name": "Dispel",
838+ "weapon": "Knife",
839+ "rank": 1
840+ },
841+ {
842+ "name": "Gravity Blast",
843+ "weapon": "Raygun",
844+ "rank": 1
845+ },
846+ {
847+ "name": "Gravity Cloak",
848+ "weapon": "Raygun",
849+ "rank": 2
850+ },
851+ {
852+ "name": "Servant Sacrifice",
853+ "weapon": "Knife",
854+ "rank": 3
855+ },
856+ {
857+ "name": "Energy Source",
858+ "weapon": "Knife",
859+ "rank": 4
860+ },
861+ {
862+ "name": "Black Butterfly",
863+ "weapon": "Knife",
864+ "rank": 6
865+ },
866+ {
867+ "name": "Pathogen Blast",
868+ "weapon": "Raygun",
869+ "rank": 8
870+ }
871+ ],
872+ "skills": [
873+ {
874+ "name": "Ether Guard",
875+ "rank": 2
876+ },
877+ {
878+ "name": "Gravity Boost",
879+ "rank": 3
880+ },
881+ {
882+ "name": "Well-Weathered",
883+ "rank": 4
884+ },
885+ {
886+ "name": "Appendage Erosion",
887+ "rank": 5
888+ },
889+ {
890+ "name": "Resistant Flesh",
891+ "rank": 6
892+ },
893+ {
894+ "name": "Tactical Analyst",
895+ "rank": 7
896+ },
897+ {
898+ "name": "King's Boon",
899+ "rank": 9
900+ },
901+ {
902+ "name": "Secondary Accelerator",
903+ "rank": 10
904+ }
905+ ],
906+ "source": "XenoSeriesWiki Mastermind wikitext, revision 303831 (2025-03-07); Art names resolved with the MediaWiki expandtemplates API.",
907+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=303831&prop=wikitext&format=json"
908+ },
909+ {
910+ "classId": "blast-fencer",
911+ "skillSlots": 3,
912+ "arts": [
913+ {
914+ "name": "Starfall Blade",
915+ "weapon": "Photon Saber",
916+ "rank": 1
917+ },
918+ {
919+ "name": "Stellar Ray",
920+ "weapon": "Psycho Launchers",
921+ "rank": 1
922+ },
923+ {
924+ "name": "Geolibrium",
925+ "weapon": "Photon Saber",
926+ "rank": 2
927+ },
928+ {
929+ "name": "Lightning Cloak",
930+ "weapon": "Psycho Launchers",
931+ "rank": 2
932+ },
933+ {
934+ "name": "Starfall Rondo",
935+ "weapon": "Photon Saber",
936+ "rank": 3
937+ },
938+ {
939+ "name": "Jetstream",
940+ "weapon": "Psycho Launchers",
941+ "rank": 4
942+ },
943+ {
944+ "name": "Astrolibrium",
945+ "weapon": "Photon Saber",
946+ "rank": 6
947+ },
948+ {
949+ "name": "Shooting Star",
950+ "weapon": "Psycho Launchers",
951+ "rank": 8
952+ }
953+ ],
954+ "skills": [
955+ {
956+ "name": "Ether Boost",
957+ "rank": 2
958+ },
959+ {
960+ "name": "Mechanoid Slayer",
961+ "rank": 3
962+ },
963+ {
964+ "name": "Knight's Soul",
965+ "rank": 5
966+ },
967+ {
968+ "name": "Aura Assault",
969+ "rank": 7
970+ },
971+ {
972+ "name": "Buff Extender",
973+ "rank": 9
974+ },
975+ {
976+ "name": "Supreme Sword",
977+ "rank": 10
978+ }
979+ ],
980+ "source": "XenoSeriesWiki Blast Fencer wikitext, revision 316279 (2025-05-07); Art names resolved with the MediaWiki expandtemplates API.",
981+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=316279&prop=wikitext&format=json"
982+ },
983+ {
984+ "classId": "galactic-knight",
985+ "skillSlots": 4,
986+ "arts": [
987+ {
988+ "name": "Astral Heal",
989+ "weapon": "Photon Saber",
990+ "rank": 1
991+ },
992+ {
993+ "name": "Astral Protection",
994+ "weapon": "Psycho Launchers",
995+ "rank": 1
996+ },
997+ {
998+ "name": "Starfall Blossom",
999+ "weapon": "Photon Saber",
1000+ "rank": 2
1001+ },
1002+ {
1003+ "name": "Astral Purge",
1004+ "weapon": "Photon Saber",
1005+ "rank": 3
1006+ },
1007+ {
1008+ "name": "Novalibrium",
1009+ "weapon": "Photon Saber",
1010+ "rank": 4
1011+ },
1012+ {
1013+ "name": "Starlight Kick",
1014+ "weapon": "Psycho Launchers",
1015+ "rank": 6
1016+ },
1017+ {
1018+ "name": "Astral Horizon",
1019+ "weapon": "Photon Saber",
1020+ "rank": 7
1021+ },
1022+ {
1023+ "name": "Galactic Cataclysm",
1024+ "weapon": "Photon Saber",
1025+ "rank": 8
1026+ }
1027+ ],
1028+ "skills": [
1029+ {
1030+ "name": "Gravity Guard",
1031+ "rank": 2
1032+ },
1033+ {
1034+ "name": "Fast Forward",
1035+ "rank": 5
1036+ },
1037+ {
1038+ "name": "Stellar Entry",
1039+ "rank": 9
1040+ },
1041+ {
1042+ "name": "Synchrony",
1043+ "rank": 10
1044+ }
1045+ ],
1046+ "source": "XenoSeriesWiki Galactic Knight wikitext, revision 303830 (2025-03-07); Art names resolved with the MediaWiki expandtemplates API.",
1047+ "sourceUrl": "https://www.xenoserieswiki.org/w/api.php?action=parse&oldid=303830&prop=wikitext&format=json"
1048+ }
1049+];
1050+
1051+export const classProgressionById = new Map(
1052+ classProgression.map((record) => [record.classId, record]),
1053+);
added src/data/skellWeapons.ts +178 -0
new file mode 100644
@@ -0,0 +1,178 @@
1+import type { StrategyKey } from "@/src/lib/types";
2+
3+export interface SkellWeaponPlan {
4+ name: string;
5+ slot: "sidearm" | "back" | "shoulder" | "arm";
6+ attribute: string;
7+ acquisition: string;
8+}
9+
10+/**
11+ * Canonical weapon facts extracted from the wiki semantic database:
12+ * attribute = Xcx Skell weapon Atr (0 electric, 1/5 physical, 2 beam,
13+ * 3 ether, 4 thermal, 6 gravity); slot and acquisition derive from the
14+ * documented model naming scheme (SHM/SRM/SSM/SAM, X = drop, XX = gold).
15+ */
16+export const skellWeaponSource = "https://www.xenoserieswiki.org/wiki/Skell_weapon";
17+
18+/**
19+ * Attribute-matched, availability-first weapons per strategy and frame-level
20+ * band: highest shop model whose required frame level fits. Slots without an
21+ * attribute-matched shop weapon are omitted rather than invented.
22+ */
23+export const skellWeaponLoadouts: Record<StrategyKey, Record<20 | 30 | 50 | 60, readonly SkellWeaponPlan[]>> = {
24+ duelist: {
25+ 20: [
26+ { name: "SHM-M120ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
27+ { name: "SRM-M120ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
28+ { name: "SSM-M120ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
29+ { name: "SAM-R120GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
30+ ],
31+ 30: [
32+ { name: "SHM-M130ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
33+ { name: "SRM-M130ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
34+ { name: "SSM-M130ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
35+ { name: "SAM-R130GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
36+ ],
37+ 50: [
38+ { name: "SHM-M140ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
39+ { name: "SRM-M140ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
40+ { name: "SSM-M140ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
41+ { name: "SAM-R140SA Minigun", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
42+ ],
43+ 60: [
44+ { name: "SHM-M140ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
45+ { name: "SRM-M140ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
46+ { name: "SSM-M140ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
47+ { name: "SAM-R160GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
48+ ],
49+ },
50+ bastion: {
51+ 20: [
52+ { name: "SHM-M120GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
53+ { name: "SRM-M120GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
54+ { name: "SSM-R220GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
55+ { name: "SAM-R120GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
56+ ],
57+ 30: [
58+ { name: "SHM-M130GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
59+ { name: "SRM-M130GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
60+ { name: "SSM-R230GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
61+ { name: "SAM-R130GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
62+ ],
63+ 50: [
64+ { name: "SHM-M140GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
65+ { name: "SRM-M140GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
66+ { name: "SSM-R240GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
67+ { name: "SAM-R140SA Minigun", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
68+ ],
69+ 60: [
70+ { name: "SHM-M140GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
71+ { name: "SRM-M140GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
72+ { name: "SSM-R760GG Boost", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
73+ { name: "SAM-R160GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
74+ ],
75+ },
76+ jaguar: {
77+ 20: [
78+ { name: "SHM-R722SA E-Sniper", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
79+ { name: "SRM-R620ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
80+ { name: "SSM-R320ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
81+ { name: "SAM-R120ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
82+ ],
83+ 30: [
84+ { name: "SHM-M330SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
85+ { name: "SRM-R630ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
86+ { name: "SSM-R330ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
87+ { name: "SAM-R130ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
88+ ],
89+ 50: [
90+ { name: "SHM-M340SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
91+ { name: "SRM-R640ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
92+ { name: "SSM-R340ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
93+ { name: "SAM-R140ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
94+ ],
95+ 60: [
96+ { name: "SHM-M340SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
97+ { name: "SRM-R640ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
98+ { name: "SSM-R340ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
99+ { name: "SAM-R140ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
100+ ],
101+ },
102+ astral: {
103+ 20: [
104+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
105+ { name: "SRM-M320ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
106+ { name: "SSM-R220ME Widebeam", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
107+ ],
108+ 30: [
109+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
110+ { name: "SRM-M330ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
111+ { name: "SSM-R130ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
112+ ],
113+ 50: [
114+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
115+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
116+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
117+ ],
118+ 60: [
119+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
120+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
121+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
122+ ],
123+ },
124+ mastermind: {
125+ 20: [
126+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
127+ { name: "SRM-M220GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
128+ { name: "SSM-R320GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
129+ ],
130+ 30: [
131+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
132+ { name: "SRM-M230GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
133+ { name: "SSM-R330GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
134+ ],
135+ 50: [
136+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
137+ { name: "SRM-M250GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
138+ { name: "SSM-R340GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
139+ ],
140+ 60: [
141+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
142+ { name: "SRM-M260GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
143+ { name: "SSM-R660GG H-Nova", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
144+ ],
145+ },
146+ galactic: {
147+ 20: [
148+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
149+ { name: "SRM-M320ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
150+ { name: "SSM-R220ME Widebeam", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
151+ ],
152+ 30: [
153+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
154+ { name: "SRM-M330ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
155+ { name: "SSM-R130ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
156+ ],
157+ 50: [
158+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
159+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
160+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
161+ ],
162+ 60: [
163+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
164+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
165+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
166+ ],
167+ },
168+};
169+
170+/** Canonical Skell augment names per strategy (wiki-verified pages). */
171+export const skellAugments: Record<StrategyKey, readonly string[]> = {
172+ duelist: ["AttributeDmg.THERM", "Custom.WP-ATK", "SpecUp.M-ATK"],
173+ bastion: ["SpecUp.HP-MAX", "SpecUp.PHYS-RES", "Resist.FLINCH"],
174+ jaguar: ["AttributeDmg.ETHER", "Custom.WP-ATK", "SpecUp.R-ATK"],
175+ astral: ["AttributeDmg.BEAM", "Custom.WP-ATK", "SpecUp.R-ATK"],
176+ mastermind: ["AttributeDmg.GRAV", "SpecUp.FUEL-COST", "SpecUp.FUEL-MAX"],
177+ galactic: ["AttributeDmg.BEAM", "Custom.WP-ATK", "SpecUp.FUEL-MAX"],
178+};
new file mode 100644
@@ -0,0 +1,178 @@
1+import type { StrategyKey } from "@/src/lib/types";
2+
3+export interface SkellWeaponPlan {
4+ name: string;
5+ slot: "sidearm" | "back" | "shoulder" | "arm";
6+ attribute: string;
7+ acquisition: string;
8+}
9+
10+/**
11+ * Canonical weapon facts extracted from the wiki semantic database:
12+ * attribute = Xcx Skell weapon Atr (0 electric, 1/5 physical, 2 beam,
13+ * 3 ether, 4 thermal, 6 gravity); slot and acquisition derive from the
14+ * documented model naming scheme (SHM/SRM/SSM/SAM, X = drop, XX = gold).
15+ */
16+export const skellWeaponSource = "https://www.xenoserieswiki.org/wiki/Skell_weapon";
17+
18+/**
19+ * Attribute-matched, availability-first weapons per strategy and frame-level
20+ * band: highest shop model whose required frame level fits. Slots without an
21+ * attribute-matched shop weapon are omitted rather than invented.
22+ */
23+export const skellWeaponLoadouts: Record<StrategyKey, Record<20 | 30 | 50 | 60, readonly SkellWeaponPlan[]>> = {
24+ duelist: {
25+ 20: [
26+ { name: "SHM-M120ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
27+ { name: "SRM-M120ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
28+ { name: "SSM-M120ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
29+ { name: "SAM-R120GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
30+ ],
31+ 30: [
32+ { name: "SHM-M130ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
33+ { name: "SRM-M130ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
34+ { name: "SSM-M130ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
35+ { name: "SAM-R130GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
36+ ],
37+ 50: [
38+ { name: "SHM-M140ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
39+ { name: "SRM-M140ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
40+ { name: "SSM-M140ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
41+ { name: "SAM-R140SA Minigun", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
42+ ],
43+ 60: [
44+ { name: "SHM-M140ME Heat-Edge", slot: "sidearm", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
45+ { name: "SRM-M140ME Dragon", slot: "back", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
46+ { name: "SSM-M140ME Heathorn", slot: "shoulder", attribute: "thermal", acquisition: "Shop purchase / New LA craft" },
47+ { name: "SAM-R160GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
48+ ],
49+ },
50+ bastion: {
51+ 20: [
52+ { name: "SHM-M120GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
53+ { name: "SRM-M120GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
54+ { name: "SSM-R220GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
55+ { name: "SAM-R120GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
56+ ],
57+ 30: [
58+ { name: "SHM-M130GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
59+ { name: "SRM-M130GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
60+ { name: "SSM-R230GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
61+ { name: "SAM-R130GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
62+ ],
63+ 50: [
64+ { name: "SHM-M140GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
65+ { name: "SRM-M140GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
66+ { name: "SSM-R240GG Voltstorm", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
67+ { name: "SAM-R140SA Minigun", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
68+ ],
69+ 60: [
70+ { name: "SHM-M140GG P-Knife", slot: "sidearm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
71+ { name: "SRM-M140GG Javelin", slot: "back", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
72+ { name: "SSM-R760GG Boost", slot: "shoulder", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
73+ { name: "SAM-R160GG Gunform", slot: "arm", attribute: "physical", acquisition: "Shop purchase / New LA craft" },
74+ ],
75+ },
76+ jaguar: {
77+ 20: [
78+ { name: "SHM-R722SA E-Sniper", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
79+ { name: "SRM-R620ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
80+ { name: "SSM-R320ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
81+ { name: "SAM-R120ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
82+ ],
83+ 30: [
84+ { name: "SHM-M330SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
85+ { name: "SRM-R630ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
86+ { name: "SSM-R330ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
87+ { name: "SAM-R130ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
88+ ],
89+ 50: [
90+ { name: "SHM-M340SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
91+ { name: "SRM-R640ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
92+ { name: "SSM-R340ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
93+ { name: "SAM-R140ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
94+ ],
95+ 60: [
96+ { name: "SHM-M340SA E-Sword", slot: "sidearm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
97+ { name: "SRM-R640ME L-Missile", slot: "back", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
98+ { name: "SSM-R340ME SHD-Missile", slot: "shoulder", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
99+ { name: "SAM-R140ME Needlegun", slot: "arm", attribute: "ether", acquisition: "Shop purchase / New LA craft" },
100+ ],
101+ },
102+ astral: {
103+ 20: [
104+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
105+ { name: "SRM-M320ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
106+ { name: "SSM-R220ME Widebeam", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
107+ ],
108+ 30: [
109+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
110+ { name: "SRM-M330ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
111+ { name: "SSM-R130ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
112+ ],
113+ 50: [
114+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
115+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
116+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
117+ ],
118+ 60: [
119+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
120+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
121+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
122+ ],
123+ },
124+ mastermind: {
125+ 20: [
126+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
127+ { name: "SRM-M220GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
128+ { name: "SSM-R320GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
129+ ],
130+ 30: [
131+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
132+ { name: "SRM-M230GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
133+ { name: "SSM-R330GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
134+ ],
135+ 50: [
136+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
137+ { name: "SRM-M250GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
138+ { name: "SSM-R340GG SHD-Gravity", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
139+ ],
140+ 60: [
141+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
142+ { name: "SRM-M260GG Hunter", slot: "back", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
143+ { name: "SSM-R660GG H-Nova", slot: "shoulder", attribute: "gravity", acquisition: "Shop purchase / New LA craft" },
144+ ],
145+ },
146+ galactic: {
147+ 20: [
148+ { name: "SHM-M120ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
149+ { name: "SRM-M320ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
150+ { name: "SSM-R220ME Widebeam", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
151+ ],
152+ 30: [
153+ { name: "SHM-M130ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
154+ { name: "SRM-M330ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
155+ { name: "SSM-R130ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
156+ ],
157+ 50: [
158+ { name: "SHM-M140ME B-Centipede", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
159+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
160+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
161+ ],
162+ 60: [
163+ { name: "SHM-M360GG Blade-Mode", slot: "sidearm", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
164+ { name: "SRM-M340ME BB-Sword", slot: "back", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
165+ { name: "SSM-R140ME M-Missile", slot: "shoulder", attribute: "beam", acquisition: "Shop purchase / New LA craft" },
166+ ],
167+ },
168+};
169+
170+/** Canonical Skell augment names per strategy (wiki-verified pages). */
171+export const skellAugments: Record<StrategyKey, readonly string[]> = {
172+ duelist: ["AttributeDmg.THERM", "Custom.WP-ATK", "SpecUp.M-ATK"],
173+ bastion: ["SpecUp.HP-MAX", "SpecUp.PHYS-RES", "Resist.FLINCH"],
174+ jaguar: ["AttributeDmg.ETHER", "Custom.WP-ATK", "SpecUp.R-ATK"],
175+ astral: ["AttributeDmg.BEAM", "Custom.WP-ATK", "SpecUp.R-ATK"],
176+ mastermind: ["AttributeDmg.GRAV", "SpecUp.FUEL-COST", "SpecUp.FUEL-MAX"],
177+ galactic: ["AttributeDmg.BEAM", "Custom.WP-ATK", "SpecUp.FUEL-MAX"],
178+};
added src/data/skells.ts +80 -0
new file mode 100644
@@ -0,0 +1,80 @@
1+import type { StrategyKey } from "@/src/lib/types";
2+
3+export type SkellFrameFamily =
4+ | "Formula"
5+ | "Urban"
6+ | "Verus"
7+ | "Lailah"
8+ | "Inferno"
9+ | "Mastema"
10+ | "Amdusias";
11+
12+export interface SkellFrameFact {
13+ frame: string;
14+ requiredLevel: number;
15+ acquisition: string;
16+}
17+
18+export const skellSource =
19+ "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Skell&prop=wikitext&format=json";
20+
21+/** Guaranteed first frame after completing the license quest. */
22+export const licenseFrame: SkellFrameFact = {
23+ frame: "US0220 Urban ST",
24+ requiredLevel: 20,
25+ acquisition: "Complete The Skell License",
26+};
27+
28+/** Exact shop frames available at each standard pilot-level breakpoint. */
29+export const shopFrames: Record<30 | 50, Record<SkellFrameFamily, SkellFrameFact>> = {
30+ 30: {
31+ Formula: { frame: "AS0130 Formula ST", requiredLevel: 30, acquisition: "Shop purchase" },
32+ Urban: { frame: "US0230 Urban ST", requiredLevel: 30, acquisition: "Shop purchase" },
33+ Verus: { frame: "AS0330 Verus ST", requiredLevel: 30, acquisition: "Shop purchase" },
34+ Lailah: { frame: "AS0430 Lailah ST", requiredLevel: 30, acquisition: "Shop purchase" },
35+ Inferno: { frame: "AS0530 Inferno ST", requiredLevel: 30, acquisition: "Shop purchase" },
36+ Mastema: { frame: "XS0630 Mastema ST", requiredLevel: 30, acquisition: "Shop purchase" },
37+ Amdusias: { frame: "XS0730 Amdusias ST", requiredLevel: 30, acquisition: "Shop purchase" },
38+ },
39+ 50: {
40+ Formula: { frame: "AS0150 Formula ST", requiredLevel: 50, acquisition: "Shop purchase" },
41+ Urban: { frame: "US0250 Urban ST", requiredLevel: 50, acquisition: "Shop purchase" },
42+ Verus: { frame: "AS0350 Verus ST", requiredLevel: 50, acquisition: "Shop purchase" },
43+ Lailah: { frame: "AS0450 Lailah ST", requiredLevel: 50, acquisition: "Shop purchase" },
44+ Inferno: { frame: "AS0550 Inferno ST", requiredLevel: 50, acquisition: "Shop purchase" },
45+ Mastema: { frame: "XS0650 Mastema ST", requiredLevel: 50, acquisition: "Shop purchase" },
46+ Amdusias: { frame: "XS0750 Amdusias ST", requiredLevel: 50, acquisition: "Shop purchase" },
47+ },
48+};
49+
50+/** Named level-60 variants are craftable postgame frames, never implicit upgrades. */
51+export const postgameFrames: Record<SkellFrameFamily, SkellFrameFact> = {
52+ Formula: { frame: "Formula Zero", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
53+ Urban: { frame: "Urban Lincoln", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
54+ Verus: { frame: "Verus Cain", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
55+ Lailah: { frame: "Lailah Queen", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
56+ Inferno: { frame: "Inferno Skydon", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
57+ Mastema: { frame: "Mastema White Reaper", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
58+ Amdusias: { frame: "Amdusias Hades", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
59+};
60+
61+/** Fixed family order used to derive deterministic alternative frames. */
62+export const frameFamilyOrder: readonly SkellFrameFamily[] = [
63+ "Formula",
64+ "Urban",
65+ "Verus",
66+ "Lailah",
67+ "Inferno",
68+ "Mastema",
69+ "Amdusias",
70+];
71+
72+/** Heuristic frame family by tactical strategy; the frame facts above remain canonical. */
73+export const strategyFrameFamily: Record<StrategyKey, SkellFrameFamily> = {
74+ duelist: "Amdusias",
75+ bastion: "Lailah",
76+ jaguar: "Formula",
77+ astral: "Mastema",
78+ mastermind: "Inferno",
79+ galactic: "Verus",
80+};
new file mode 100644
@@ -0,0 +1,80 @@
1+import type { StrategyKey } from "@/src/lib/types";
2+
3+export type SkellFrameFamily =
4+ | "Formula"
5+ | "Urban"
6+ | "Verus"
7+ | "Lailah"
8+ | "Inferno"
9+ | "Mastema"
10+ | "Amdusias";
11+
12+export interface SkellFrameFact {
13+ frame: string;
14+ requiredLevel: number;
15+ acquisition: string;
16+}
17+
18+export const skellSource =
19+ "https://www.xenoserieswiki.org/w/api.php?action=parse&page=Skell&prop=wikitext&format=json";
20+
21+/** Guaranteed first frame after completing the license quest. */
22+export const licenseFrame: SkellFrameFact = {
23+ frame: "US0220 Urban ST",
24+ requiredLevel: 20,
25+ acquisition: "Complete The Skell License",
26+};
27+
28+/** Exact shop frames available at each standard pilot-level breakpoint. */
29+export const shopFrames: Record<30 | 50, Record<SkellFrameFamily, SkellFrameFact>> = {
30+ 30: {
31+ Formula: { frame: "AS0130 Formula ST", requiredLevel: 30, acquisition: "Shop purchase" },
32+ Urban: { frame: "US0230 Urban ST", requiredLevel: 30, acquisition: "Shop purchase" },
33+ Verus: { frame: "AS0330 Verus ST", requiredLevel: 30, acquisition: "Shop purchase" },
34+ Lailah: { frame: "AS0430 Lailah ST", requiredLevel: 30, acquisition: "Shop purchase" },
35+ Inferno: { frame: "AS0530 Inferno ST", requiredLevel: 30, acquisition: "Shop purchase" },
36+ Mastema: { frame: "XS0630 Mastema ST", requiredLevel: 30, acquisition: "Shop purchase" },
37+ Amdusias: { frame: "XS0730 Amdusias ST", requiredLevel: 30, acquisition: "Shop purchase" },
38+ },
39+ 50: {
40+ Formula: { frame: "AS0150 Formula ST", requiredLevel: 50, acquisition: "Shop purchase" },
41+ Urban: { frame: "US0250 Urban ST", requiredLevel: 50, acquisition: "Shop purchase" },
42+ Verus: { frame: "AS0350 Verus ST", requiredLevel: 50, acquisition: "Shop purchase" },
43+ Lailah: { frame: "AS0450 Lailah ST", requiredLevel: 50, acquisition: "Shop purchase" },
44+ Inferno: { frame: "AS0550 Inferno ST", requiredLevel: 50, acquisition: "Shop purchase" },
45+ Mastema: { frame: "XS0650 Mastema ST", requiredLevel: 50, acquisition: "Shop purchase" },
46+ Amdusias: { frame: "XS0750 Amdusias ST", requiredLevel: 50, acquisition: "Shop purchase" },
47+ },
48+};
49+
50+/** Named level-60 variants are craftable postgame frames, never implicit upgrades. */
51+export const postgameFrames: Record<SkellFrameFamily, SkellFrameFact> = {
52+ Formula: { frame: "Formula Zero", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
53+ Urban: { frame: "Urban Lincoln", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
54+ Verus: { frame: "Verus Cain", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
55+ Lailah: { frame: "Lailah Queen", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
56+ Inferno: { frame: "Inferno Skydon", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
57+ Mastema: { frame: "Mastema White Reaper", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
58+ Amdusias: { frame: "Amdusias Hades", requiredLevel: 60, acquisition: "Craftable following Chapter 12" },
59+};
60+
61+/** Fixed family order used to derive deterministic alternative frames. */
62+export const frameFamilyOrder: readonly SkellFrameFamily[] = [
63+ "Formula",
64+ "Urban",
65+ "Verus",
66+ "Lailah",
67+ "Inferno",
68+ "Mastema",
69+ "Amdusias",
70+];
71+
72+/** Heuristic frame family by tactical strategy; the frame facts above remain canonical. */
73+export const strategyFrameFamily: Record<StrategyKey, SkellFrameFamily> = {
74+ duelist: "Amdusias",
75+ bastion: "Lailah",
76+ jaguar: "Formula",
77+ astral: "Mastema",
78+ mastermind: "Inferno",
79+ galactic: "Verus",
80+};
added src/lib/engine.test.ts +214 -0
new file mode 100644
@@ -0,0 +1,214 @@
1+import assert from "node:assert/strict";
2+import test from "node:test";
3+import { companions } from "@/src/data/companions";
4+import { classProgression } from "@/src/data/progression";
5+import {
6+ buildRoster,
7+ classRanksForActiveClass,
8+ editClassRank,
9+ normalizeClassRanks,
10+ planAvatar,
11+ planCompanion,
12+ recommendSkellAlternatives,
13+ recommendSkellFrame,
14+ recommendSkellLoadout,
15+ resolveTeam,
16+} from "@/src/lib/engine";
17+
18+const duelistRoute = {
19+ drifter: 10,
20+ striker: 10,
21+ "samurai-gunner": 10,
22+ duelist: 10,
23+};
24+
25+test("canonical catalogs cover every Avatar class and all 22 DE companions", () => {
26+ assert.equal(classProgression.length, 16);
27+ assert.equal(companions.length, 22);
28+ assert.equal(new Set(classProgression.map((record) => record.classId)).size, 16);
29+ assert.equal(new Set(companions.map((companion) => companion.name)).size, 22);
30+ assert.ok(companions.some((companion) => companion.name === "Mia"));
31+ assert.ok(classProgression.every((record) =>
32+ record.arts.every((art) => art.rank >= 1 && art.rank <= 10 && art.weapon.length > 0)
33+ && record.skills.every((skill) => skill.rank >= 1 && skill.rank <= 10)));
34+});
35+
36+test("normalizes trained class prerequisites to rank 10", () => {
37+ const normalized = normalizeClassRanks({ "full-metal-jaguar": 3 });
38+
39+ assert.equal(normalized.drifter, 10);
40+ assert.equal(normalized.commando, 10);
41+ assert.equal(normalized["winged-viper"], 10);
42+ assert.equal(normalized["full-metal-jaguar"], 3);
43+ assert.equal(normalized.striker, 0);
44+});
45+
46+test("Avatar picks only learned weapon-compatible Arts and respects Skill slots", () => {
47+ const plan = planAvatar("duelist", duelistRoute);
48+ const equippedWeapons = new Set([plan.weapons.ranged, plan.weapons.melee]);
49+
50+ assert.equal(plan.activeRank, 10);
51+ assert.equal(plan.arts.length, 8);
52+ assert.ok(plan.arts.every((art) => art.weapon && equippedWeapons.has(art.weapon)));
53+ assert.equal(plan.skills.length, 3);
54+ assert.equal(plan.skillSlots, 3);
55+ assert.ok(!plan.skills.some((skill) => skill.name === "Core Crusher"));
56+});
57+
58+test("lowering a rank below 10 resets trained descendants", () => {
59+ const lowered = editClassRank(duelistRoute, "striker", 5);
60+ assert.equal(lowered.striker, 5);
61+ assert.equal(lowered["samurai-gunner"], 0);
62+ assert.equal(lowered.duelist, 0);
63+ assert.equal(lowered.drifter, 10);
64+
65+ const root = editClassRank(duelistRoute, "drifter", 0);
66+ assert.ok(Object.values(root).every((rank) => rank === 0));
67+
68+ const child = editClassRank(duelistRoute, "duelist", 3);
69+ assert.equal(child.duelist, 3);
70+ assert.equal(child.striker, 10);
71+
72+ const raised = editClassRank({ "full-metal-jaguar": 0 }, "full-metal-jaguar", 4);
73+ assert.equal(raised.commando, 10);
74+});
75+
76+test("selecting a class masters its route, keeps descendants, resets other branches", () => {
77+ const ranks = classRanksForActiveClass("full-metal-jaguar", duelistRoute);
78+
79+ assert.equal(ranks.drifter, 10);
80+ assert.equal(ranks.commando, 10);
81+ assert.equal(ranks["winged-viper"], 10);
82+ assert.equal(ranks["full-metal-jaguar"], 1);
83+ assert.equal(ranks.striker, 0);
84+ assert.equal(ranks.duelist, 0);
85+
86+ const kept = classRanksForActiveClass("striker", duelistRoute);
87+ assert.equal(kept.duelist, 10);
88+ assert.equal(kept["samurai-gunner"], 10);
89+ assert.equal(kept.commando, 0);
90+});
91+
92+test("mastered off-branch classes change legal Avatar recommendations", () => {
93+ const base = planAvatar("duelist", duelistRoute);
94+ const expanded = planAvatar("duelist", {
95+ ...duelistRoute,
96+ "full-metal-jaguar": 10,
97+ });
98+
99+ assert.deepEqual(
100+ [expanded.normalizedClassRanks.commando, expanded.normalizedClassRanks["winged-viper"]],
101+ [10, 10],
102+ );
103+ assert.ok(expanded.legalWeaponPairs.length > base.legalWeaponPairs.length);
104+ assert.ok(expanded.skills.some((skill) => skill.name === "Combo Gunner"));
105+});
106+
107+test("AUTO team selection is deterministic and guide-informed after coverage", () => {
108+ const result = resolveTeam(["", "", ""], "duelist", 30);
109+
110+ assert.equal(result.mode, "auto");
111+ assert.deepEqual(result.names, ["Elma", "H.B.", "Irina"]);
112+ assert.ok(result.slots.every((slot) => slot.provenance === "auto"));
113+});
114+
115+test("mixed team selection preserves manual slots and fills only AUTO slots", () => {
116+ const result = resolveTeam(["Lin", "", ""], "duelist", 30);
117+
118+ assert.equal(result.mode, "mixed");
119+ assert.equal(result.names[0], "Lin");
120+ assert.equal(result.slots[0].provenance, "manual");
121+ assert.equal(new Set(result.names.filter(Boolean)).size, 3);
122+});
123+
124+test("companion loadout follows personal rank and fixed slot cap", () => {
125+ const lin = planCompanion("Lin", 20, 3);
126+
127+ assert.deepEqual(lin.arts.map((art) => art.name), [
128+ "Wild Down",
129+ "Wild Smash",
130+ "Flame Cloak",
131+ "Fire Carnival",
132+ ]);
133+ assert.equal(lin.skills.length, 0);
134+ assert.equal(lin.skillSlots, 3);
135+});
136+
137+test("companion floors and effective levels stay within canonical bounds", () => {
138+ const elma = planCompanion("Elma", 100, 0);
139+ assert.equal(elma.effectiveLevel, 99);
140+ assert.equal(elma.personalRank, 3);
141+
142+ assert.throws(
143+ () => resolveTeam(["Nagi", "", ""], "duelist", 1),
144+ /requires effective level 33/,
145+ );
146+ assert.throws(
147+ () => resolveTeam(["Unknown", "", ""], "duelist", 30),
148+ /Unknown manual companion/,
149+ );
150+
151+ const resolved = resolveTeam(["Lin", "Elma", "Irina"], "duelist", 100);
152+ assert.deepEqual(resolved.slots.map((slot) => slot.effectiveLevel), [99, 99, 99]);
153+ const roster = buildRoster(Number.NaN, "duelist", duelistRoute, resolved, [3, 3, 3]);
154+ assert.equal(roster[0]?.effectiveLevel, 1);
155+});
156+
157+test("Skell frames require license, pilot level, and explicit postgame access", () => {
158+ assert.equal(recommendSkellFrame({ strategy: "duelist", pilotLevel: 99, hasLicense: false }), null);
159+ assert.equal(
160+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 20, hasLicense: true })?.frame,
161+ "US0220 Urban ST",
162+ );
163+ assert.equal(
164+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 60, hasLicense: true })?.frame,
165+ "XS0750 Amdusias ST",
166+ );
167+ assert.equal(
168+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 60, hasLicense: true, postgameFrames: true })?.frame,
169+ "Amdusias Hades",
170+ );
171+});
172+
173+test("Skell alternatives offer two distinct same-tier frames", () => {
174+ assert.deepEqual(
175+ recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 20, hasLicense: true }),
176+ [],
177+ );
178+
179+ const tier30 = recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 30, hasLicense: true });
180+ assert.equal(tier30.length, 2);
181+ assert.ok(tier30.every((alt) => alt.requiredLevel === 30));
182+ assert.ok(tier30.every((alt) => !alt.frame.includes("Amdusias")));
183+ assert.notEqual(tier30[0]?.frame, tier30[1]?.frame);
184+
185+ const postgame = recommendSkellAlternatives({
186+ strategy: "duelist", pilotLevel: 60, hasLicense: true, postgameFrames: true,
187+ });
188+ assert.ok(postgame.every((alt) => alt.requiredLevel === 60));
189+ assert.ok(postgame.every((alt) => alt.acquisition.includes("Chapter 12")));
190+
191+ assert.deepEqual(
192+ recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 50, hasLicense: false }),
193+ [],
194+ );
195+});
196+
197+test("Skell loadout matches the strategy attribute and frame-level band", () => {
198+ const duelist30 = recommendSkellLoadout("duelist", 30);
199+ assert.ok(duelist30.weapons.length > 0);
200+ assert.ok(duelist30.weapons.every((weapon) =>
201+ weapon.attribute === "thermal" || weapon.attribute === "physical"));
202+ assert.ok(duelist30.weapons.every((weapon) => !weapon.name.includes("XX")));
203+ assert.ok(duelist30.augments.includes("AttributeDmg.THERM"));
204+
205+ const duelist50 = recommendSkellLoadout("duelist", 50);
206+ assert.notDeepEqual(
207+ duelist50.weapons.map((weapon) => weapon.name),
208+ duelist30.weapons.map((weapon) => weapon.name),
209+ );
210+
211+ for (const strategy of ["astral", "mastermind", "galactic"] as const) {
212+ assert.ok(recommendSkellLoadout(strategy, 60).weapons.length >= 3);
213+ }
214+});
new file mode 100644
@@ -0,0 +1,214 @@
1+import assert from "node:assert/strict";
2+import test from "node:test";
3+import { companions } from "@/src/data/companions";
4+import { classProgression } from "@/src/data/progression";
5+import {
6+ buildRoster,
7+ classRanksForActiveClass,
8+ editClassRank,
9+ normalizeClassRanks,
10+ planAvatar,
11+ planCompanion,
12+ recommendSkellAlternatives,
13+ recommendSkellFrame,
14+ recommendSkellLoadout,
15+ resolveTeam,
16+} from "@/src/lib/engine";
17+
18+const duelistRoute = {
19+ drifter: 10,
20+ striker: 10,
21+ "samurai-gunner": 10,
22+ duelist: 10,
23+};
24+
25+test("canonical catalogs cover every Avatar class and all 22 DE companions", () => {
26+ assert.equal(classProgression.length, 16);
27+ assert.equal(companions.length, 22);
28+ assert.equal(new Set(classProgression.map((record) => record.classId)).size, 16);
29+ assert.equal(new Set(companions.map((companion) => companion.name)).size, 22);
30+ assert.ok(companions.some((companion) => companion.name === "Mia"));
31+ assert.ok(classProgression.every((record) =>
32+ record.arts.every((art) => art.rank >= 1 && art.rank <= 10 && art.weapon.length > 0)
33+ && record.skills.every((skill) => skill.rank >= 1 && skill.rank <= 10)));
34+});
35+
36+test("normalizes trained class prerequisites to rank 10", () => {
37+ const normalized = normalizeClassRanks({ "full-metal-jaguar": 3 });
38+
39+ assert.equal(normalized.drifter, 10);
40+ assert.equal(normalized.commando, 10);
41+ assert.equal(normalized["winged-viper"], 10);
42+ assert.equal(normalized["full-metal-jaguar"], 3);
43+ assert.equal(normalized.striker, 0);
44+});
45+
46+test("Avatar picks only learned weapon-compatible Arts and respects Skill slots", () => {
47+ const plan = planAvatar("duelist", duelistRoute);
48+ const equippedWeapons = new Set([plan.weapons.ranged, plan.weapons.melee]);
49+
50+ assert.equal(plan.activeRank, 10);
51+ assert.equal(plan.arts.length, 8);
52+ assert.ok(plan.arts.every((art) => art.weapon && equippedWeapons.has(art.weapon)));
53+ assert.equal(plan.skills.length, 3);
54+ assert.equal(plan.skillSlots, 3);
55+ assert.ok(!plan.skills.some((skill) => skill.name === "Core Crusher"));
56+});
57+
58+test("lowering a rank below 10 resets trained descendants", () => {
59+ const lowered = editClassRank(duelistRoute, "striker", 5);
60+ assert.equal(lowered.striker, 5);
61+ assert.equal(lowered["samurai-gunner"], 0);
62+ assert.equal(lowered.duelist, 0);
63+ assert.equal(lowered.drifter, 10);
64+
65+ const root = editClassRank(duelistRoute, "drifter", 0);
66+ assert.ok(Object.values(root).every((rank) => rank === 0));
67+
68+ const child = editClassRank(duelistRoute, "duelist", 3);
69+ assert.equal(child.duelist, 3);
70+ assert.equal(child.striker, 10);
71+
72+ const raised = editClassRank({ "full-metal-jaguar": 0 }, "full-metal-jaguar", 4);
73+ assert.equal(raised.commando, 10);
74+});
75+
76+test("selecting a class masters its route, keeps descendants, resets other branches", () => {
77+ const ranks = classRanksForActiveClass("full-metal-jaguar", duelistRoute);
78+
79+ assert.equal(ranks.drifter, 10);
80+ assert.equal(ranks.commando, 10);
81+ assert.equal(ranks["winged-viper"], 10);
82+ assert.equal(ranks["full-metal-jaguar"], 1);
83+ assert.equal(ranks.striker, 0);
84+ assert.equal(ranks.duelist, 0);
85+
86+ const kept = classRanksForActiveClass("striker", duelistRoute);
87+ assert.equal(kept.duelist, 10);
88+ assert.equal(kept["samurai-gunner"], 10);
89+ assert.equal(kept.commando, 0);
90+});
91+
92+test("mastered off-branch classes change legal Avatar recommendations", () => {
93+ const base = planAvatar("duelist", duelistRoute);
94+ const expanded = planAvatar("duelist", {
95+ ...duelistRoute,
96+ "full-metal-jaguar": 10,
97+ });
98+
99+ assert.deepEqual(
100+ [expanded.normalizedClassRanks.commando, expanded.normalizedClassRanks["winged-viper"]],
101+ [10, 10],
102+ );
103+ assert.ok(expanded.legalWeaponPairs.length > base.legalWeaponPairs.length);
104+ assert.ok(expanded.skills.some((skill) => skill.name === "Combo Gunner"));
105+});
106+
107+test("AUTO team selection is deterministic and guide-informed after coverage", () => {
108+ const result = resolveTeam(["", "", ""], "duelist", 30);
109+
110+ assert.equal(result.mode, "auto");
111+ assert.deepEqual(result.names, ["Elma", "H.B.", "Irina"]);
112+ assert.ok(result.slots.every((slot) => slot.provenance === "auto"));
113+});
114+
115+test("mixed team selection preserves manual slots and fills only AUTO slots", () => {
116+ const result = resolveTeam(["Lin", "", ""], "duelist", 30);
117+
118+ assert.equal(result.mode, "mixed");
119+ assert.equal(result.names[0], "Lin");
120+ assert.equal(result.slots[0].provenance, "manual");
121+ assert.equal(new Set(result.names.filter(Boolean)).size, 3);
122+});
123+
124+test("companion loadout follows personal rank and fixed slot cap", () => {
125+ const lin = planCompanion("Lin", 20, 3);
126+
127+ assert.deepEqual(lin.arts.map((art) => art.name), [
128+ "Wild Down",
129+ "Wild Smash",
130+ "Flame Cloak",
131+ "Fire Carnival",
132+ ]);
133+ assert.equal(lin.skills.length, 0);
134+ assert.equal(lin.skillSlots, 3);
135+});
136+
137+test("companion floors and effective levels stay within canonical bounds", () => {
138+ const elma = planCompanion("Elma", 100, 0);
139+ assert.equal(elma.effectiveLevel, 99);
140+ assert.equal(elma.personalRank, 3);
141+
142+ assert.throws(
143+ () => resolveTeam(["Nagi", "", ""], "duelist", 1),
144+ /requires effective level 33/,
145+ );
146+ assert.throws(
147+ () => resolveTeam(["Unknown", "", ""], "duelist", 30),
148+ /Unknown manual companion/,
149+ );
150+
151+ const resolved = resolveTeam(["Lin", "Elma", "Irina"], "duelist", 100);
152+ assert.deepEqual(resolved.slots.map((slot) => slot.effectiveLevel), [99, 99, 99]);
153+ const roster = buildRoster(Number.NaN, "duelist", duelistRoute, resolved, [3, 3, 3]);
154+ assert.equal(roster[0]?.effectiveLevel, 1);
155+});
156+
157+test("Skell frames require license, pilot level, and explicit postgame access", () => {
158+ assert.equal(recommendSkellFrame({ strategy: "duelist", pilotLevel: 99, hasLicense: false }), null);
159+ assert.equal(
160+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 20, hasLicense: true })?.frame,
161+ "US0220 Urban ST",
162+ );
163+ assert.equal(
164+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 60, hasLicense: true })?.frame,
165+ "XS0750 Amdusias ST",
166+ );
167+ assert.equal(
168+ recommendSkellFrame({ strategy: "duelist", pilotLevel: 60, hasLicense: true, postgameFrames: true })?.frame,
169+ "Amdusias Hades",
170+ );
171+});
172+
173+test("Skell alternatives offer two distinct same-tier frames", () => {
174+ assert.deepEqual(
175+ recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 20, hasLicense: true }),
176+ [],
177+ );
178+
179+ const tier30 = recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 30, hasLicense: true });
180+ assert.equal(tier30.length, 2);
181+ assert.ok(tier30.every((alt) => alt.requiredLevel === 30));
182+ assert.ok(tier30.every((alt) => !alt.frame.includes("Amdusias")));
183+ assert.notEqual(tier30[0]?.frame, tier30[1]?.frame);
184+
185+ const postgame = recommendSkellAlternatives({
186+ strategy: "duelist", pilotLevel: 60, hasLicense: true, postgameFrames: true,
187+ });
188+ assert.ok(postgame.every((alt) => alt.requiredLevel === 60));
189+ assert.ok(postgame.every((alt) => alt.acquisition.includes("Chapter 12")));
190+
191+ assert.deepEqual(
192+ recommendSkellAlternatives({ strategy: "duelist", pilotLevel: 50, hasLicense: false }),
193+ [],
194+ );
195+});
196+
197+test("Skell loadout matches the strategy attribute and frame-level band", () => {
198+ const duelist30 = recommendSkellLoadout("duelist", 30);
199+ assert.ok(duelist30.weapons.length > 0);
200+ assert.ok(duelist30.weapons.every((weapon) =>
201+ weapon.attribute === "thermal" || weapon.attribute === "physical"));
202+ assert.ok(duelist30.weapons.every((weapon) => !weapon.name.includes("XX")));
203+ assert.ok(duelist30.augments.includes("AttributeDmg.THERM"));
204+
205+ const duelist50 = recommendSkellLoadout("duelist", 50);
206+ assert.notDeepEqual(
207+ duelist50.weapons.map((weapon) => weapon.name),
208+ duelist30.weapons.map((weapon) => weapon.name),
209+ );
210+
211+ for (const strategy of ["astral", "mastermind", "galactic"] as const) {
212+ assert.ok(recommendSkellLoadout(strategy, 60).weapons.length >= 3);
213+ }
214+});
added src/lib/engine.ts +826 -0
new file mode 100644
@@ -0,0 +1,826 @@
1+import { buildStrategies, classStrategy, companionSelectionPriority } from "@/src/data/builds";
2+import { classes } from "@/src/data/classes";
3+import { companionByName, companions } from "@/src/data/companions";
4+import { classProgression, classProgressionById } from "@/src/data/progression";
5+import {
6+ frameFamilyOrder,
7+ licenseFrame,
8+ postgameFrames,
9+ shopFrames,
10+ skellSource,
11+ strategyFrameFamily,
12+} from "@/src/data/skells";
13+import { skellAugments, skellWeaponLoadouts } from "@/src/data/skellWeapons";
14+import type {
15+ ArtSelection,
16+ AvatarPlan,
17+ CapabilityVector,
18+ ClassEntry,
19+ ClassRanks,
20+ CompanionPlan,
21+ Lang,
22+ LocalizedText,
23+ RosterMember,
24+ SkellFrameRecommendation,
25+ SkellLoadout,
26+ SkillSelection,
27+ StrategyKey,
28+ TeamResolution,
29+ TeamScore,
30+ WeaponPair,
31+} from "@/src/lib/types";
32+
33+const classById = new Map(classes.map((entry) => [entry.id, entry]));
34+const classIds = classes.map((entry) => entry.id).sort(compareText);
35+const ancestorIdsByClass = new Map(
36+ classIds.map((classId) => {
37+ const ancestors: string[] = [];
38+ let parent = classById.get(classId)?.parent;
39+ while (parent) {
40+ ancestors.push(parent);
41+ parent = classById.get(parent)?.parent;
42+ }
43+ return [classId, ancestors] as const;
44+ }),
45+);
46+const sortedClassProgression = [...classProgression]
47+ .sort((left, right) => compareText(left.classId, right.classId));
48+const tierFourClasses = classes
49+ .filter((entry) => entry.tier === 4)
50+ .sort((left, right) => compareText(left.id, right.id));
51+const sortedCompanions = [...companions]
52+ .sort((left, right) => compareText(left.name, right.name));
53+
54+
55+interface LearnedArt {
56+ name: string;
57+ weapon: string;
58+ rank: number;
59+ sourceClassId: string;
60+ source: string;
61+ sourceUrl: string;
62+}
63+
64+interface LearnedSkill {
65+ name: string;
66+ rank: number;
67+ sourceClassId: string;
68+ source: string;
69+ sourceUrl: string;
70+}
71+
72+export interface SkellRecommendationRequest {
73+ strategy: StrategyKey;
74+ pilotLevel: number;
75+ hasLicense: boolean;
76+ postgameFrames?: boolean;
77+}
78+
79+function compareText(left: string, right: string): number {
80+ return left < right ? -1 : left > right ? 1 : 0;
81+}
82+
83+function clampRank(rank: number, maximum = 10): number {
84+ if (!Number.isFinite(rank)) return 0;
85+ return Math.max(0, Math.min(maximum, Math.trunc(rank)));
86+}
87+function clampLevel(level: number): number {
88+ if (!Number.isFinite(level)) return 1;
89+ return Math.max(1, Math.min(99, Math.trunc(level)));
90+}
91+
92+
93+function preferenceIndex(name: string, preferences: readonly string[]): number {
94+ const index = preferences.indexOf(name);
95+ return index < 0 ? Number.MAX_SAFE_INTEGER : index;
96+}
97+function firstSourceUrl(citation: string): string {
98+ const start = citation.indexOf("https://");
99+ if (start < 0) return citation;
100+ const end = citation.indexOf(" ", start);
101+ return citation.slice(start, end < 0 ? undefined : end);
102+}
103+
104+
105+/** Renders a bilingual pair, primary language first. */
106+export function dual(pair: LocalizedText, lang: Lang): string {
107+ return lang === "en" ? `${pair[0]} / ${pair[1]}` : `${pair[1]} / ${pair[0]}`;
108+}
109+
110+/** Walks the class tree from Drifter down to the selected class. */
111+export function classRoute(selected: ClassEntry): ClassEntry[] {
112+ const chain: ClassEntry[] = [];
113+ let current: ClassEntry | undefined = classById.get(selected.id);
114+ while (current) {
115+ chain.unshift(current);
116+ current = current.parent ? classById.get(current.parent) : undefined;
117+ }
118+ return chain;
119+}
120+
121+/** DFS pre-order of the class tree from Drifter (parents before children). */
122+export function classTree(): ClassEntry[] {
123+ const children = new Map<string, ClassEntry[]>();
124+ for (const entry of classes) {
125+ if (!entry.parent) continue;
126+ const list = children.get(entry.parent) ?? [];
127+ list.push(entry);
128+ children.set(entry.parent, list);
129+ }
130+ for (const list of children.values()) list.sort((left, right) => compareText(left.id, right.id));
131+
132+ const tree: ClassEntry[] = [];
133+ const walk = (entry: ClassEntry): void => {
134+ tree.push(entry);
135+ for (const child of children.get(entry.id) ?? []) walk(child);
136+ };
137+ const root = classById.get("drifter");
138+ if (root) walk(root);
139+ return tree;
140+}
141+
142+/** Parent chain of a class, immediate parent first (empty for Drifter). */
143+export function ancestorIds(classId: string): string[] {
144+ return [...(ancestorIdsByClass.get(classId) ?? [])];
145+}
146+
147+/**
148+ * Produces a complete, clamped rank map and raises every ancestor of a
149+ * trained class to rank 10. Ancestors are never raised to a child's rank.
150+ */
151+export function normalizeClassRanks(classRanks: ClassRanks): Record<string, number> {
152+ const normalized: Record<string, number> = {};
153+ for (const classId of classIds) normalized[classId] = clampRank(classRanks[classId] ?? 0);
154+
155+ for (const classId of classIds) {
156+ if (normalized[classId] === 0) continue;
157+ for (const ancestorId of ancestorIdsByClass.get(classId) ?? []) {
158+ normalized[ancestorId] = 10;
159+ }
160+ }
161+ return normalized;
162+}
163+
164+/**
165+ * Applies a manual rank edit. Lowering a class below rank 10 resets every
166+ * trained descendant to 0, since it can no longer be trained; raising any
167+ * class still masters its ancestors through normalization.
168+ */
169+export function editClassRank(
170+ classRanks: ClassRanks,
171+ classId: string,
172+ value: number,
173+): Record<string, number> {
174+ const rank = clampRank(value);
175+ const draft = { ...classRanks, [classId]: rank };
176+ if (rank < 10) {
177+ for (const otherId of classIds) {
178+ if (otherId !== classId && (ancestorIdsByClass.get(otherId) ?? []).includes(classId)) {
179+ draft[otherId] = 0;
180+ }
181+ }
182+ }
183+ return normalizeClassRanks(draft);
184+}
185+
186+/**
187+ * Rank map for selecting `classId` as the active class: its whole ancestor
188+ * route is mastered, trained descendants keep their ranks, and every other
189+ * class is reset to 0.
190+ */
191+export function classRanksForActiveClass(
192+ classId: string,
193+ classRanks: ClassRanks,
194+): Record<string, number> {
195+ const ancestors = new Set(ancestorIdsByClass.get(classId) ?? []);
196+ const descendants = new Set(
197+ classIds.filter((otherId) =>
198+ otherId !== classId && (ancestorIdsByClass.get(otherId) ?? []).includes(classId)),
199+ );
200+
201+ const next: Record<string, number> = {};
202+ for (const otherId of classIds) {
203+ next[otherId] = otherId === classId
204+ ? Math.max(1, clampRank(classRanks[otherId] ?? 0))
205+ : ancestors.has(otherId)
206+ ? 10
207+ : descendants.has(otherId)
208+ ? clampRank(classRanks[otherId] ?? 0)
209+ : 0;
210+ }
211+ return normalizeClassRanks(next);
212+}
213+
214+function learnedClassFacts(classRanks: Record<string, number>): {
215+ arts: LearnedArt[];
216+ skills: LearnedSkill[];
217+} {
218+ const arts: LearnedArt[] = [];
219+ const skills: LearnedSkill[] = [];
220+
221+ for (const record of sortedClassProgression) {
222+ const trainedRank = classRanks[record.classId] ?? 0;
223+ for (const art of record.arts) {
224+ if (art.rank <= trainedRank) {
225+ arts.push({
226+ ...art,
227+ sourceClassId: record.classId,
228+ source: record.source,
229+ sourceUrl: record.sourceUrl,
230+ });
231+ }
232+ }
233+ for (const skill of record.skills) {
234+ if (skill.rank <= trainedRank) {
235+ skills.push({
236+ ...skill,
237+ sourceClassId: record.classId,
238+ source: record.source,
239+ sourceUrl: record.sourceUrl,
240+ });
241+ }
242+ }
243+ }
244+ return { arts, skills };
245+}
246+
247+function legalWeaponPairs(activeClass: ClassEntry, classRanks: Record<string, number>): WeaponPair[] {
248+ const ranged = new Set([activeClass.ranged]);
249+ const melee = new Set([activeClass.melee]);
250+ for (const entry of tierFourClasses) {
251+ if ((classRanks[entry.id] ?? 0) < 10) continue;
252+ ranged.add(entry.ranged);
253+ melee.add(entry.melee);
254+ }
255+
256+ const pairs: WeaponPair[] = [];
257+ const rangedWeapons = [...ranged].sort(compareText);
258+ const meleeWeapons = [...melee].sort(compareText);
259+ for (const rangedWeapon of rangedWeapons) {
260+ for (const meleeWeapon of meleeWeapons) {
261+ pairs.push({ ranged: rangedWeapon, melee: meleeWeapon });
262+ }
263+ }
264+ return pairs;
265+}
266+
267+function pairScore(
268+ pair: WeaponPair,
269+ nativePair: WeaponPair,
270+ learnedArts: readonly LearnedArt[],
271+ preferences: readonly string[],
272+): readonly number[] {
273+ const legalArts = learnedArts.filter(
274+ (art) => art.weapon === pair.ranged || art.weapon === pair.melee,
275+ );
276+ const preferred = legalArts.filter((art) => preferences.includes(art.name));
277+ const preferredWeight = preferred.reduce(
278+ (total, art) => total + preferences.length - preferenceIndex(art.name, preferences),
279+ 0,
280+ );
281+ const nativeWeapons =
282+ Number(pair.ranged === nativePair.ranged) + Number(pair.melee === nativePair.melee);
283+ return [preferred.length, preferredWeight, Math.min(8, legalArts.length), nativeWeapons];
284+}
285+
286+function compareNumericScore(left: readonly number[], right: readonly number[]): number {
287+ for (let index = 0; index < left.length; index += 1) {
288+ const difference = (right[index] ?? 0) - (left[index] ?? 0);
289+ if (difference !== 0) return difference;
290+ }
291+ return 0;
292+}
293+
294+function selectAvatarArts(
295+ learnedArts: readonly LearnedArt[],
296+ weapons: WeaponPair,
297+ preferences: readonly string[],
298+): ArtSelection[] {
299+ return learnedArts
300+ .filter((art) => art.weapon === weapons.ranged || art.weapon === weapons.melee)
301+ .sort((left, right) =>
302+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
303+ || left.rank - right.rank
304+ || compareText(left.name, right.name)
305+ || compareText(left.sourceClassId, right.sourceClassId))
306+ .slice(0, 8)
307+ .map((art) => {
308+ const preferredAt = preferenceIndex(art.name, preferences);
309+ return {
310+ name: art.name,
311+ weapon: art.weapon,
312+ unlockRank: art.rank,
313+ source: {
314+ kind: "class",
315+ id: art.sourceClassId,
316+ url: art.sourceUrl,
317+ citation: art.source,
318+ },
319+ reason: preferredAt < preferences.length
320+ ? `Strategy preference #${preferredAt + 1}; usable with ${art.weapon}`
321+ : `Usable with ${art.weapon}; learned at ${art.sourceClassId} rank ${art.rank}`,
322+ };
323+ });
324+}
325+
326+function selectAvatarSkills(
327+ learnedSkills: readonly LearnedSkill[],
328+ preferences: readonly string[],
329+ skillSlots: number,
330+): SkillSelection[] {
331+ return [...learnedSkills]
332+ .sort((left, right) =>
333+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
334+ || left.rank - right.rank
335+ || compareText(left.name, right.name)
336+ || compareText(left.sourceClassId, right.sourceClassId))
337+ .slice(0, skillSlots)
338+ .map((skill) => {
339+ const preferredAt = preferenceIndex(skill.name, preferences);
340+ return {
341+ name: skill.name,
342+ unlockRank: skill.rank,
343+ source: {
344+ kind: "class",
345+ id: skill.sourceClassId,
346+ url: skill.sourceUrl,
347+ citation: skill.source,
348+ },
349+ reason: preferredAt < preferences.length
350+ ? `Strategy preference #${preferredAt + 1}; cross-class once learned`
351+ : `Learned at ${skill.sourceClassId} rank ${skill.rank}; usable cross-class`,
352+ };
353+ });
354+}
355+
356+/**
357+ * Plans an Avatar only from the complete class-rank map and canonical class
358+ * facts. The active rank is always derived from that map.
359+ */
360+export function planAvatar(
361+ activeClassId: string,
362+ classRanks: ClassRanks,
363+ strategy: StrategyKey = classStrategy[activeClassId],
364+): AvatarPlan {
365+ const activeClass = classById.get(activeClassId);
366+ const progression = classProgressionById.get(activeClassId);
367+ if (!activeClass || !progression || !strategy) {
368+ throw new Error(`Unknown active class: ${activeClassId}`);
369+ }
370+
371+ const normalizedClassRanks = normalizeClassRanks(classRanks);
372+ const learned = learnedClassFacts(normalizedClassRanks);
373+ const strategyData = buildStrategies[strategy];
374+ const pairs = legalWeaponPairs(activeClass, normalizedClassRanks);
375+ const nativePair = { ranged: activeClass.ranged, melee: activeClass.melee };
376+ const rankedPairs = pairs
377+ .map((pair) => ({
378+ pair,
379+ score: pairScore(pair, nativePair, learned.arts, strategyData.preferredArts),
380+ }))
381+ .sort((left, right) =>
382+ compareNumericScore(left.score, right.score)
383+ || compareText(left.pair.ranged, right.pair.ranged)
384+ || compareText(left.pair.melee, right.pair.melee));
385+ const weapons = rankedPairs[0]?.pair ?? nativePair;
386+ const arts = selectAvatarArts(learned.arts, weapons, strategyData.preferredArts);
387+ const skills = selectAvatarSkills(
388+ learned.skills,
389+ strategyData.preferredSkills,
390+ progression.skillSlots,
391+ );
392+ const masteredTierFour = tierFourClasses
393+ .filter((entry) => normalizedClassRanks[entry.id] === 10)
394+ .map((entry) => entry.id);
395+
396+ return {
397+ activeClassId,
398+ activeClassName: activeClass.en,
399+ activeRank: normalizedClassRanks[activeClassId] ?? 0,
400+ normalizedClassRanks,
401+ strategy,
402+ legalWeaponPairs: pairs,
403+ weapons,
404+ arts,
405+ skills,
406+ skillSlots: progression.skillSlots,
407+ planReasons: [
408+ `${arts.length} Arts match ${weapons.ranged} + ${weapons.melee}; capped at 8`,
409+ `${skills.length} learned Skills fill the active class cap of ${progression.skillSlots}`,
410+ masteredTierFour.length > 0
411+ ? `Mastered tier-4 weapon access: ${masteredTierFour.join(", ")}`
412+ : "No mastered tier-4 cross-class weapons",
413+ ],
414+ };
415+}
416+
417+function selectCompanionArts(
418+ companion: (typeof companions)[number],
419+ personalRank: number,
420+): ArtSelection[] {
421+ const strategy = buildStrategies[companion.strategy];
422+ return companion.arts
423+ .filter((art) => art.rank <= personalRank)
424+ .slice()
425+ .sort((left, right) =>
426+ preferenceIndex(left.name, companion.defaultArts)
427+ - preferenceIndex(right.name, companion.defaultArts)
428+ || preferenceIndex(left.name, strategy.preferredArts)
429+ - preferenceIndex(right.name, strategy.preferredArts)
430+ || compareText(left.name, right.name)
431+ || left.rank - right.rank)
432+ .slice(0, 8)
433+ .map((art) => {
434+ const defaultAt = preferenceIndex(art.name, companion.defaultArts);
435+ const preferredAt = preferenceIndex(art.name, strategy.preferredArts);
436+ return {
437+ name: art.name,
438+ unlockRank: art.rank,
439+ source: {
440+ kind: "companion",
441+ id: companion.name,
442+ url: firstSourceUrl(companion.source),
443+ citation: companion.source,
444+ },
445+ reason: defaultAt < companion.defaultArts.length
446+ ? `Canonical default Art #${defaultAt + 1}`
447+ : preferredAt < strategy.preferredArts.length
448+ ? `Strategy preference #${preferredAt + 1}`
449+ : `Unlocked at personal rank ${art.rank}`,
450+ };
451+ });
452+}
453+
454+function selectCompanionSkills(
455+ companion: (typeof companions)[number],
456+ personalRank: number,
457+): SkillSelection[] {
458+ const preferences = buildStrategies[companion.strategy].preferredSkills;
459+ return companion.skills
460+ .filter((skill) => skill.rank <= personalRank)
461+ .slice()
462+ .sort((left, right) =>
463+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
464+ || compareText(left.name, right.name)
465+ || left.rank - right.rank)
466+ .slice(0, companion.skillSlots)
467+ .map((skill) => {
468+ const preferredAt = preferenceIndex(skill.name, preferences);
469+ return {
470+ name: skill.name,
471+ unlockRank: skill.rank,
472+ source: {
473+ kind: "companion",
474+ id: companion.name,
475+ url: firstSourceUrl(companion.source),
476+ citation: companion.source,
477+ },
478+ reason: preferredAt < preferences.length
479+ ? `Strategy preference #${preferredAt + 1}`
480+ : `Unlocked at personal rank ${skill.rank}`,
481+ };
482+ });
483+}
484+
485+/** Plans only the named companion's canonical personal kit. */
486+export function planCompanion(
487+ name: string,
488+ effectiveLevel: number,
489+ personalClassRank: number,
490+): CompanionPlan {
491+ const companion = companionByName.get(name);
492+ if (!companion) throw new Error(`Unknown companion: ${name}`);
493+
494+ const personalRank = Math.max(
495+ companion.startRank,
496+ clampRank(personalClassRank, companion.maxRank),
497+ );
498+ const arts = selectCompanionArts(companion, personalRank);
499+ const skills = selectCompanionSkills(companion, personalRank);
500+ return {
501+ name: companion.name,
502+ className: companion.className,
503+ effectiveLevel: clampLevel(effectiveLevel),
504+ personalRank,
505+ weapons: { ranged: companion.ranged, melee: companion.melee },
506+ strategy: companion.strategy,
507+ capabilities: { ...companion.capabilities },
508+ arts,
509+ skills,
510+ skillSlots: companion.skillSlots,
511+ note: buildStrategies[companion.strategy].role,
512+ source: companion.source,
513+ planReasons: [
514+ `Personal rank ${personalRank}: ${arts.length} learned Arts and ${skills.length}/${companion.skillSlots} Skills`,
515+ "Canonical default Arts precede strategy preferences",
516+ ],
517+ };
518+}
519+
520+
521+function coverageForTeam(names: readonly string[], activeClassId: string): CapabilityVector {
522+ const avatarStrategy = classStrategy[activeClassId];
523+ if (!avatarStrategy) throw new Error(`Unknown active class: ${activeClassId}`);
524+
525+ let coverage = { ...buildStrategies[avatarStrategy].capabilities };
526+ for (const name of names) {
527+ const companion = companionByName.get(name);
528+ if (companion) {
529+ coverage = {
530+ tank: coverage.tank + companion.capabilities.tank,
531+ support: coverage.support + companion.capabilities.support,
532+ damage: coverage.damage + companion.capabilities.damage,
533+ control: coverage.control + companion.capabilities.control,
534+ };
535+ }
536+ }
537+ return coverage;
538+}
539+
540+function scoreTeam(names: readonly string[], activeClassId: string): TeamScore {
541+ const avatarStrategy = classStrategy[activeClassId];
542+ if (!avatarStrategy) throw new Error(`Unknown active class: ${activeClassId}`);
543+ const vectors = [
544+ buildStrategies[avatarStrategy].capabilities,
545+ ...names.flatMap((name) => {
546+ const companion = companionByName.get(name);
547+ return companion ? [companion.capabilities] : [];
548+ }),
549+ ];
550+ const specialistCoverage = (["tank", "support", "damage"] as const)
551+ .map((axis) => vectors.filter((vector) => vector[axis] >= 2).length);
552+ const coverage = coverageForTeam(names, activeClassId);
553+ return {
554+ minimumCoreCoverage: Math.min(...specialistCoverage),
555+ coveredCoreAxes: specialistCoverage.filter((value) => value > 0).length,
556+ cappedCoreDepth: specialistCoverage.reduce((total, value) => total + Math.min(2, value), 0),
557+ communityFit: names.reduce(
558+ (total, name) => total + (companionSelectionPriority[name] ?? 0),
559+ 0,
560+ ),
561+ control: coverage.control,
562+ total: coverage.tank + coverage.support + coverage.damage + coverage.control,
563+ };
564+}
565+
566+function compareTeamScore(left: TeamScore, right: TeamScore): number {
567+ const keys: readonly (keyof TeamScore)[] = [
568+ "minimumCoreCoverage",
569+ "coveredCoreAxes",
570+ "cappedCoreDepth",
571+ "communityFit",
572+ "control",
573+ "total",
574+ ];
575+ for (const key of keys) {
576+ const difference = left[key] - right[key];
577+ if (difference !== 0) return difference;
578+ }
579+ return 0;
580+}
581+
582+
583+/**
584+ * Preserves all manual slots and fills only empty slots with companions
585+ * eligible at the shared squad level, without duplicates, by whole-party
586+ * lexicographic coverage.
587+ */
588+export function resolveTeam(
589+ slots: readonly [string, string, string],
590+ activeClassId: string,
591+ effectiveLevel: number,
592+): TeamResolution {
593+ const level = clampLevel(effectiveLevel);
594+ const manualNames = new Set<string>();
595+ for (const name of slots) {
596+ if (name === "") continue;
597+ const companion = companionByName.get(name);
598+ if (!companion) throw new Error(`Unknown manual companion: ${name}`);
599+ if (companion.startLevel > level) {
600+ throw new Error(`${name} requires effective level ${companion.startLevel}`);
601+ }
602+ if (manualNames.has(name)) throw new Error(`Duplicate manual companion: ${name}`);
603+ manualNames.add(name);
604+ }
605+ const manualCount = slots.filter((name) => name !== "").length;
606+ const mode: TeamResolution["mode"] =
607+ manualCount === 3 ? "manual" : manualCount === 0 ? "auto" : "mixed";
608+
609+ if (mode === "manual") {
610+ const names: [string, string, string] = [...slots];
611+ const coverage = coverageForTeam(names, activeClassId);
612+ return {
613+ names,
614+ slots: names.map((name) => ({
615+ name,
616+ effectiveLevel: level,
617+ provenance: "manual" as const,
618+ })) as TeamResolution["slots"],
619+ coverage,
620+ score: scoreTeam(names, activeClassId),
621+ mode,
622+ };
623+ }
624+
625+ const eligibleNames = sortedCompanions
626+ .filter((companion) => companion.startLevel <= level && !manualNames.has(companion.name))
627+ .map((companion) => companion.name);
628+
629+ let bestNames: [string, string, string] | undefined;
630+ let bestCoverage: CapabilityVector | undefined;
631+ let bestScore: TeamScore | undefined;
632+ const current: string[] = [];
633+ const used = new Set(manualNames);
634+
635+ const enumerate = (index: number): void => {
636+ if (index === 3) {
637+ const names = [...current] as [string, string, string];
638+ const coverage = coverageForTeam(names, activeClassId);
639+ const score = scoreTeam(names, activeClassId);
640+ const scoreComparison = bestScore ? compareTeamScore(score, bestScore) : 1;
641+ const tieBreak = bestNames
642+ ? compareText(
643+ names.map((name) => name || "\uffff").join("\u0000"),
644+ bestNames.map((name) => name || "\uffff").join("\u0000"),
645+ )
646+ : -1;
647+ if (!bestNames || scoreComparison > 0 || (scoreComparison === 0 && tieBreak < 0)) {
648+ bestNames = names;
649+ bestCoverage = coverage;
650+ bestScore = score;
651+ }
652+ return;
653+ }
654+
655+ const manualName = slots[index];
656+ if (manualName !== "") {
657+ current.push(manualName);
658+ enumerate(index + 1);
659+ current.pop();
660+ return;
661+ }
662+
663+ const candidates = ["", ...eligibleNames];
664+ for (const name of candidates) {
665+ if (name !== "" && used.has(name)) continue;
666+ current.push(name);
667+ if (name !== "") used.add(name);
668+ enumerate(index + 1);
669+ if (name !== "") used.delete(name);
670+ current.pop();
671+ }
672+ };
673+
674+ enumerate(0);
675+ const names: [string, string, string] =
676+ bestNames ?? ([...slots] as [string, string, string]);
677+ const coverage = bestCoverage ?? coverageForTeam(names, activeClassId);
678+ return {
679+ names,
680+ slots: names.map((name, index) => ({
681+ name,
682+ effectiveLevel: level,
683+ provenance: slots[index] === "" ? "auto" as const : "manual" as const,
684+ })) as TeamResolution["slots"],
685+ coverage,
686+ score: bestScore ?? scoreTeam(names, activeClassId),
687+ mode,
688+ };
689+}
690+
691+/** Avatar first, followed by planned companions in their intact team slots. */
692+export function buildRoster(
693+ avatarLevel: number,
694+ activeClassId: string,
695+ classRanks: ClassRanks,
696+ team: TeamResolution,
697+ personalClassRanks: readonly [number, number, number],
698+): RosterMember[] {
699+ const avatar = planAvatar(activeClassId, classRanks);
700+ const strategyNote = buildStrategies[avatar.strategy].role;
701+ const roster: RosterMember[] = [{
702+ kind: "avatar",
703+ name: "Avatar",
704+ className: avatar.activeClassName,
705+ effectiveLevel: clampLevel(avatarLevel),
706+ rank: avatar.activeRank,
707+ weapons: avatar.weapons,
708+ arts: avatar.arts,
709+ skills: avatar.skills,
710+ skillSlots: avatar.skillSlots,
711+ strategy: avatar.strategy,
712+ note: strategyNote,
713+ planReasons: avatar.planReasons,
714+ source: classProgressionById.get(activeClassId)?.source,
715+ }];
716+
717+ team.slots.forEach((slot, index) => {
718+ if (slot.name === "") return;
719+ const companion = planCompanion(
720+ slot.name,
721+ slot.effectiveLevel,
722+ personalClassRanks[index],
723+ );
724+ roster.push({
725+ kind: "companion",
726+ name: companion.name,
727+ className: companion.className,
728+ effectiveLevel: companion.effectiveLevel,
729+ rank: companion.personalRank,
730+ weapons: companion.weapons,
731+ arts: companion.arts,
732+ skills: companion.skills,
733+ skillSlots: companion.skillSlots,
734+ strategy: companion.strategy,
735+ note: companion.note,
736+ planReasons: companion.planReasons,
737+ source: companion.source,
738+ });
739+ });
740+ return roster;
741+}
742+
743+
744+/** Returns a frame recommendation only when license and pilot-level gates pass. */
745+export function recommendSkellFrame(
746+ request: SkellRecommendationRequest,
747+): SkellFrameRecommendation | null {
748+ const pilotLevel = clampLevel(request.pilotLevel);
749+ if (!request.hasLicense || pilotLevel < 20) return null;
750+
751+ if (pilotLevel < 30) {
752+ return {
753+ ...licenseFrame,
754+ reason: "Guaranteed license frame; no strategy-specific upgrade assumed",
755+ source: skellSource,
756+ };
757+ }
758+
759+ const family = strategyFrameFamily[request.strategy];
760+ const strategyRole = buildStrategies[request.strategy].role[0];
761+ if (pilotLevel >= 60 && request.postgameFrames === true) {
762+ return {
763+ ...postgameFrames[family],
764+ reason: `Explicit postgame-frame choice; ${family} suits ${strategyRole}`,
765+ source: skellSource,
766+ };
767+ }
768+
769+ const tier: 30 | 50 = pilotLevel >= 50 ? 50 : 30;
770+ return {
771+ ...shopFrames[tier][family],
772+ reason: `${family} is the highest eligible shop frame for ${strategyRole}`,
773+ source: skellSource,
774+ };
775+}
776+
777+/**
778+ * Two deterministic alternative frames at the same tier as the main
779+ * recommendation: the next families in the fixed order. None below level 30,
780+ * where the license frame is the only canonical option in our data.
781+ */
782+export function recommendSkellAlternatives(
783+ request: SkellRecommendationRequest,
784+): readonly SkellFrameRecommendation[] {
785+ const pilotLevel = clampLevel(request.pilotLevel);
786+ if (!request.hasLicense || pilotLevel < 30) return [];
787+
788+ const family = strategyFrameFamily[request.strategy];
789+ const start = frameFamilyOrder.indexOf(family);
790+ const families = [1, 2].map(
791+ (offset) => frameFamilyOrder[(start + offset) % frameFamilyOrder.length],
792+ );
793+
794+ if (pilotLevel >= 60 && request.postgameFrames === true) {
795+ return families.map((alt) => ({
796+ ...postgameFrames[alt],
797+ reason: `Alternative postgame frame at the same tier (${alt})`,
798+ source: skellSource,
799+ }));
800+ }
801+
802+ const tier: 30 | 50 = pilotLevel >= 50 ? 50 : 30;
803+ return families.map((alt) => ({
804+ ...shopFrames[tier][alt],
805+ reason: `Alternative shop frame at the same tier (${alt})`,
806+ source: skellSource,
807+ }));
808+}
809+
810+/**
811+ * Attribute-matched weapons and augments for a recommended frame's level
812+ * band. Availability-first: only canonical shop models whose required frame
813+ * level fits; slots without a match stay empty.
814+ */
815+export function recommendSkellLoadout(
816+ strategy: StrategyKey,
817+ frameLevel: number,
818+): SkellLoadout {
819+ const band = ([20, 30, 50, 60] as const)
820+ .filter((candidate) => candidate <= frameLevel)
821+ .at(-1) ?? 20;
822+ return {
823+ weapons: skellWeaponLoadouts[strategy]?.[band] ?? [],
824+ augments: skellAugments[strategy] ?? [],
825+ };
826+}
new file mode 100644
@@ -0,0 +1,826 @@
1+import { buildStrategies, classStrategy, companionSelectionPriority } from "@/src/data/builds";
2+import { classes } from "@/src/data/classes";
3+import { companionByName, companions } from "@/src/data/companions";
4+import { classProgression, classProgressionById } from "@/src/data/progression";
5+import {
6+ frameFamilyOrder,
7+ licenseFrame,
8+ postgameFrames,
9+ shopFrames,
10+ skellSource,
11+ strategyFrameFamily,
12+} from "@/src/data/skells";
13+import { skellAugments, skellWeaponLoadouts } from "@/src/data/skellWeapons";
14+import type {
15+ ArtSelection,
16+ AvatarPlan,
17+ CapabilityVector,
18+ ClassEntry,
19+ ClassRanks,
20+ CompanionPlan,
21+ Lang,
22+ LocalizedText,
23+ RosterMember,
24+ SkellFrameRecommendation,
25+ SkellLoadout,
26+ SkillSelection,
27+ StrategyKey,
28+ TeamResolution,
29+ TeamScore,
30+ WeaponPair,
31+} from "@/src/lib/types";
32+
33+const classById = new Map(classes.map((entry) => [entry.id, entry]));
34+const classIds = classes.map((entry) => entry.id).sort(compareText);
35+const ancestorIdsByClass = new Map(
36+ classIds.map((classId) => {
37+ const ancestors: string[] = [];
38+ let parent = classById.get(classId)?.parent;
39+ while (parent) {
40+ ancestors.push(parent);
41+ parent = classById.get(parent)?.parent;
42+ }
43+ return [classId, ancestors] as const;
44+ }),
45+);
46+const sortedClassProgression = [...classProgression]
47+ .sort((left, right) => compareText(left.classId, right.classId));
48+const tierFourClasses = classes
49+ .filter((entry) => entry.tier === 4)
50+ .sort((left, right) => compareText(left.id, right.id));
51+const sortedCompanions = [...companions]
52+ .sort((left, right) => compareText(left.name, right.name));
53+
54+
55+interface LearnedArt {
56+ name: string;
57+ weapon: string;
58+ rank: number;
59+ sourceClassId: string;
60+ source: string;
61+ sourceUrl: string;
62+}
63+
64+interface LearnedSkill {
65+ name: string;
66+ rank: number;
67+ sourceClassId: string;
68+ source: string;
69+ sourceUrl: string;
70+}
71+
72+export interface SkellRecommendationRequest {
73+ strategy: StrategyKey;
74+ pilotLevel: number;
75+ hasLicense: boolean;
76+ postgameFrames?: boolean;
77+}
78+
79+function compareText(left: string, right: string): number {
80+ return left < right ? -1 : left > right ? 1 : 0;
81+}
82+
83+function clampRank(rank: number, maximum = 10): number {
84+ if (!Number.isFinite(rank)) return 0;
85+ return Math.max(0, Math.min(maximum, Math.trunc(rank)));
86+}
87+function clampLevel(level: number): number {
88+ if (!Number.isFinite(level)) return 1;
89+ return Math.max(1, Math.min(99, Math.trunc(level)));
90+}
91+
92+
93+function preferenceIndex(name: string, preferences: readonly string[]): number {
94+ const index = preferences.indexOf(name);
95+ return index < 0 ? Number.MAX_SAFE_INTEGER : index;
96+}
97+function firstSourceUrl(citation: string): string {
98+ const start = citation.indexOf("https://");
99+ if (start < 0) return citation;
100+ const end = citation.indexOf(" ", start);
101+ return citation.slice(start, end < 0 ? undefined : end);
102+}
103+
104+
105+/** Renders a bilingual pair, primary language first. */
106+export function dual(pair: LocalizedText, lang: Lang): string {
107+ return lang === "en" ? `${pair[0]} / ${pair[1]}` : `${pair[1]} / ${pair[0]}`;
108+}
109+
110+/** Walks the class tree from Drifter down to the selected class. */
111+export function classRoute(selected: ClassEntry): ClassEntry[] {
112+ const chain: ClassEntry[] = [];
113+ let current: ClassEntry | undefined = classById.get(selected.id);
114+ while (current) {
115+ chain.unshift(current);
116+ current = current.parent ? classById.get(current.parent) : undefined;
117+ }
118+ return chain;
119+}
120+
121+/** DFS pre-order of the class tree from Drifter (parents before children). */
122+export function classTree(): ClassEntry[] {
123+ const children = new Map<string, ClassEntry[]>();
124+ for (const entry of classes) {
125+ if (!entry.parent) continue;
126+ const list = children.get(entry.parent) ?? [];
127+ list.push(entry);
128+ children.set(entry.parent, list);
129+ }
130+ for (const list of children.values()) list.sort((left, right) => compareText(left.id, right.id));
131+
132+ const tree: ClassEntry[] = [];
133+ const walk = (entry: ClassEntry): void => {
134+ tree.push(entry);
135+ for (const child of children.get(entry.id) ?? []) walk(child);
136+ };
137+ const root = classById.get("drifter");
138+ if (root) walk(root);
139+ return tree;
140+}
141+
142+/** Parent chain of a class, immediate parent first (empty for Drifter). */
143+export function ancestorIds(classId: string): string[] {
144+ return [...(ancestorIdsByClass.get(classId) ?? [])];
145+}
146+
147+/**
148+ * Produces a complete, clamped rank map and raises every ancestor of a
149+ * trained class to rank 10. Ancestors are never raised to a child's rank.
150+ */
151+export function normalizeClassRanks(classRanks: ClassRanks): Record<string, number> {
152+ const normalized: Record<string, number> = {};
153+ for (const classId of classIds) normalized[classId] = clampRank(classRanks[classId] ?? 0);
154+
155+ for (const classId of classIds) {
156+ if (normalized[classId] === 0) continue;
157+ for (const ancestorId of ancestorIdsByClass.get(classId) ?? []) {
158+ normalized[ancestorId] = 10;
159+ }
160+ }
161+ return normalized;
162+}
163+
164+/**
165+ * Applies a manual rank edit. Lowering a class below rank 10 resets every
166+ * trained descendant to 0, since it can no longer be trained; raising any
167+ * class still masters its ancestors through normalization.
168+ */
169+export function editClassRank(
170+ classRanks: ClassRanks,
171+ classId: string,
172+ value: number,
173+): Record<string, number> {
174+ const rank = clampRank(value);
175+ const draft = { ...classRanks, [classId]: rank };
176+ if (rank < 10) {
177+ for (const otherId of classIds) {
178+ if (otherId !== classId && (ancestorIdsByClass.get(otherId) ?? []).includes(classId)) {
179+ draft[otherId] = 0;
180+ }
181+ }
182+ }
183+ return normalizeClassRanks(draft);
184+}
185+
186+/**
187+ * Rank map for selecting `classId` as the active class: its whole ancestor
188+ * route is mastered, trained descendants keep their ranks, and every other
189+ * class is reset to 0.
190+ */
191+export function classRanksForActiveClass(
192+ classId: string,
193+ classRanks: ClassRanks,
194+): Record<string, number> {
195+ const ancestors = new Set(ancestorIdsByClass.get(classId) ?? []);
196+ const descendants = new Set(
197+ classIds.filter((otherId) =>
198+ otherId !== classId && (ancestorIdsByClass.get(otherId) ?? []).includes(classId)),
199+ );
200+
201+ const next: Record<string, number> = {};
202+ for (const otherId of classIds) {
203+ next[otherId] = otherId === classId
204+ ? Math.max(1, clampRank(classRanks[otherId] ?? 0))
205+ : ancestors.has(otherId)
206+ ? 10
207+ : descendants.has(otherId)
208+ ? clampRank(classRanks[otherId] ?? 0)
209+ : 0;
210+ }
211+ return normalizeClassRanks(next);
212+}
213+
214+function learnedClassFacts(classRanks: Record<string, number>): {
215+ arts: LearnedArt[];
216+ skills: LearnedSkill[];
217+} {
218+ const arts: LearnedArt[] = [];
219+ const skills: LearnedSkill[] = [];
220+
221+ for (const record of sortedClassProgression) {
222+ const trainedRank = classRanks[record.classId] ?? 0;
223+ for (const art of record.arts) {
224+ if (art.rank <= trainedRank) {
225+ arts.push({
226+ ...art,
227+ sourceClassId: record.classId,
228+ source: record.source,
229+ sourceUrl: record.sourceUrl,
230+ });
231+ }
232+ }
233+ for (const skill of record.skills) {
234+ if (skill.rank <= trainedRank) {
235+ skills.push({
236+ ...skill,
237+ sourceClassId: record.classId,
238+ source: record.source,
239+ sourceUrl: record.sourceUrl,
240+ });
241+ }
242+ }
243+ }
244+ return { arts, skills };
245+}
246+
247+function legalWeaponPairs(activeClass: ClassEntry, classRanks: Record<string, number>): WeaponPair[] {
248+ const ranged = new Set([activeClass.ranged]);
249+ const melee = new Set([activeClass.melee]);
250+ for (const entry of tierFourClasses) {
251+ if ((classRanks[entry.id] ?? 0) < 10) continue;
252+ ranged.add(entry.ranged);
253+ melee.add(entry.melee);
254+ }
255+
256+ const pairs: WeaponPair[] = [];
257+ const rangedWeapons = [...ranged].sort(compareText);
258+ const meleeWeapons = [...melee].sort(compareText);
259+ for (const rangedWeapon of rangedWeapons) {
260+ for (const meleeWeapon of meleeWeapons) {
261+ pairs.push({ ranged: rangedWeapon, melee: meleeWeapon });
262+ }
263+ }
264+ return pairs;
265+}
266+
267+function pairScore(
268+ pair: WeaponPair,
269+ nativePair: WeaponPair,
270+ learnedArts: readonly LearnedArt[],
271+ preferences: readonly string[],
272+): readonly number[] {
273+ const legalArts = learnedArts.filter(
274+ (art) => art.weapon === pair.ranged || art.weapon === pair.melee,
275+ );
276+ const preferred = legalArts.filter((art) => preferences.includes(art.name));
277+ const preferredWeight = preferred.reduce(
278+ (total, art) => total + preferences.length - preferenceIndex(art.name, preferences),
279+ 0,
280+ );
281+ const nativeWeapons =
282+ Number(pair.ranged === nativePair.ranged) + Number(pair.melee === nativePair.melee);
283+ return [preferred.length, preferredWeight, Math.min(8, legalArts.length), nativeWeapons];
284+}
285+
286+function compareNumericScore(left: readonly number[], right: readonly number[]): number {
287+ for (let index = 0; index < left.length; index += 1) {
288+ const difference = (right[index] ?? 0) - (left[index] ?? 0);
289+ if (difference !== 0) return difference;
290+ }
291+ return 0;
292+}
293+
294+function selectAvatarArts(
295+ learnedArts: readonly LearnedArt[],
296+ weapons: WeaponPair,
297+ preferences: readonly string[],
298+): ArtSelection[] {
299+ return learnedArts
300+ .filter((art) => art.weapon === weapons.ranged || art.weapon === weapons.melee)
301+ .sort((left, right) =>
302+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
303+ || left.rank - right.rank
304+ || compareText(left.name, right.name)
305+ || compareText(left.sourceClassId, right.sourceClassId))
306+ .slice(0, 8)
307+ .map((art) => {
308+ const preferredAt = preferenceIndex(art.name, preferences);
309+ return {
310+ name: art.name,
311+ weapon: art.weapon,
312+ unlockRank: art.rank,
313+ source: {
314+ kind: "class",
315+ id: art.sourceClassId,
316+ url: art.sourceUrl,
317+ citation: art.source,
318+ },
319+ reason: preferredAt < preferences.length
320+ ? `Strategy preference #${preferredAt + 1}; usable with ${art.weapon}`
321+ : `Usable with ${art.weapon}; learned at ${art.sourceClassId} rank ${art.rank}`,
322+ };
323+ });
324+}
325+
326+function selectAvatarSkills(
327+ learnedSkills: readonly LearnedSkill[],
328+ preferences: readonly string[],
329+ skillSlots: number,
330+): SkillSelection[] {
331+ return [...learnedSkills]
332+ .sort((left, right) =>
333+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
334+ || left.rank - right.rank
335+ || compareText(left.name, right.name)
336+ || compareText(left.sourceClassId, right.sourceClassId))
337+ .slice(0, skillSlots)
338+ .map((skill) => {
339+ const preferredAt = preferenceIndex(skill.name, preferences);
340+ return {
341+ name: skill.name,
342+ unlockRank: skill.rank,
343+ source: {
344+ kind: "class",
345+ id: skill.sourceClassId,
346+ url: skill.sourceUrl,
347+ citation: skill.source,
348+ },
349+ reason: preferredAt < preferences.length
350+ ? `Strategy preference #${preferredAt + 1}; cross-class once learned`
351+ : `Learned at ${skill.sourceClassId} rank ${skill.rank}; usable cross-class`,
352+ };
353+ });
354+}
355+
356+/**
357+ * Plans an Avatar only from the complete class-rank map and canonical class
358+ * facts. The active rank is always derived from that map.
359+ */
360+export function planAvatar(
361+ activeClassId: string,
362+ classRanks: ClassRanks,
363+ strategy: StrategyKey = classStrategy[activeClassId],
364+): AvatarPlan {
365+ const activeClass = classById.get(activeClassId);
366+ const progression = classProgressionById.get(activeClassId);
367+ if (!activeClass || !progression || !strategy) {
368+ throw new Error(`Unknown active class: ${activeClassId}`);
369+ }
370+
371+ const normalizedClassRanks = normalizeClassRanks(classRanks);
372+ const learned = learnedClassFacts(normalizedClassRanks);
373+ const strategyData = buildStrategies[strategy];
374+ const pairs = legalWeaponPairs(activeClass, normalizedClassRanks);
375+ const nativePair = { ranged: activeClass.ranged, melee: activeClass.melee };
376+ const rankedPairs = pairs
377+ .map((pair) => ({
378+ pair,
379+ score: pairScore(pair, nativePair, learned.arts, strategyData.preferredArts),
380+ }))
381+ .sort((left, right) =>
382+ compareNumericScore(left.score, right.score)
383+ || compareText(left.pair.ranged, right.pair.ranged)
384+ || compareText(left.pair.melee, right.pair.melee));
385+ const weapons = rankedPairs[0]?.pair ?? nativePair;
386+ const arts = selectAvatarArts(learned.arts, weapons, strategyData.preferredArts);
387+ const skills = selectAvatarSkills(
388+ learned.skills,
389+ strategyData.preferredSkills,
390+ progression.skillSlots,
391+ );
392+ const masteredTierFour = tierFourClasses
393+ .filter((entry) => normalizedClassRanks[entry.id] === 10)
394+ .map((entry) => entry.id);
395+
396+ return {
397+ activeClassId,
398+ activeClassName: activeClass.en,
399+ activeRank: normalizedClassRanks[activeClassId] ?? 0,
400+ normalizedClassRanks,
401+ strategy,
402+ legalWeaponPairs: pairs,
403+ weapons,
404+ arts,
405+ skills,
406+ skillSlots: progression.skillSlots,
407+ planReasons: [
408+ `${arts.length} Arts match ${weapons.ranged} + ${weapons.melee}; capped at 8`,
409+ `${skills.length} learned Skills fill the active class cap of ${progression.skillSlots}`,
410+ masteredTierFour.length > 0
411+ ? `Mastered tier-4 weapon access: ${masteredTierFour.join(", ")}`
412+ : "No mastered tier-4 cross-class weapons",
413+ ],
414+ };
415+}
416+
417+function selectCompanionArts(
418+ companion: (typeof companions)[number],
419+ personalRank: number,
420+): ArtSelection[] {
421+ const strategy = buildStrategies[companion.strategy];
422+ return companion.arts
423+ .filter((art) => art.rank <= personalRank)
424+ .slice()
425+ .sort((left, right) =>
426+ preferenceIndex(left.name, companion.defaultArts)
427+ - preferenceIndex(right.name, companion.defaultArts)
428+ || preferenceIndex(left.name, strategy.preferredArts)
429+ - preferenceIndex(right.name, strategy.preferredArts)
430+ || compareText(left.name, right.name)
431+ || left.rank - right.rank)
432+ .slice(0, 8)
433+ .map((art) => {
434+ const defaultAt = preferenceIndex(art.name, companion.defaultArts);
435+ const preferredAt = preferenceIndex(art.name, strategy.preferredArts);
436+ return {
437+ name: art.name,
438+ unlockRank: art.rank,
439+ source: {
440+ kind: "companion",
441+ id: companion.name,
442+ url: firstSourceUrl(companion.source),
443+ citation: companion.source,
444+ },
445+ reason: defaultAt < companion.defaultArts.length
446+ ? `Canonical default Art #${defaultAt + 1}`
447+ : preferredAt < strategy.preferredArts.length
448+ ? `Strategy preference #${preferredAt + 1}`
449+ : `Unlocked at personal rank ${art.rank}`,
450+ };
451+ });
452+}
453+
454+function selectCompanionSkills(
455+ companion: (typeof companions)[number],
456+ personalRank: number,
457+): SkillSelection[] {
458+ const preferences = buildStrategies[companion.strategy].preferredSkills;
459+ return companion.skills
460+ .filter((skill) => skill.rank <= personalRank)
461+ .slice()
462+ .sort((left, right) =>
463+ preferenceIndex(left.name, preferences) - preferenceIndex(right.name, preferences)
464+ || compareText(left.name, right.name)
465+ || left.rank - right.rank)
466+ .slice(0, companion.skillSlots)
467+ .map((skill) => {
468+ const preferredAt = preferenceIndex(skill.name, preferences);
469+ return {
470+ name: skill.name,
471+ unlockRank: skill.rank,
472+ source: {
473+ kind: "companion",
474+ id: companion.name,
475+ url: firstSourceUrl(companion.source),
476+ citation: companion.source,
477+ },
478+ reason: preferredAt < preferences.length
479+ ? `Strategy preference #${preferredAt + 1}`
480+ : `Unlocked at personal rank ${skill.rank}`,
481+ };
482+ });
483+}
484+
485+/** Plans only the named companion's canonical personal kit. */
486+export function planCompanion(
487+ name: string,
488+ effectiveLevel: number,
489+ personalClassRank: number,
490+): CompanionPlan {
491+ const companion = companionByName.get(name);
492+ if (!companion) throw new Error(`Unknown companion: ${name}`);
493+
494+ const personalRank = Math.max(
495+ companion.startRank,
496+ clampRank(personalClassRank, companion.maxRank),
497+ );
498+ const arts = selectCompanionArts(companion, personalRank);
499+ const skills = selectCompanionSkills(companion, personalRank);
500+ return {
501+ name: companion.name,
502+ className: companion.className,
503+ effectiveLevel: clampLevel(effectiveLevel),
504+ personalRank,
505+ weapons: { ranged: companion.ranged, melee: companion.melee },
506+ strategy: companion.strategy,
507+ capabilities: { ...companion.capabilities },
508+ arts,
509+ skills,
510+ skillSlots: companion.skillSlots,
511+ note: buildStrategies[companion.strategy].role,
512+ source: companion.source,
513+ planReasons: [
514+ `Personal rank ${personalRank}: ${arts.length} learned Arts and ${skills.length}/${companion.skillSlots} Skills`,
515+ "Canonical default Arts precede strategy preferences",
516+ ],
517+ };
518+}
519+
520+
521+function coverageForTeam(names: readonly string[], activeClassId: string): CapabilityVector {
522+ const avatarStrategy = classStrategy[activeClassId];
523+ if (!avatarStrategy) throw new Error(`Unknown active class: ${activeClassId}`);
524+
525+ let coverage = { ...buildStrategies[avatarStrategy].capabilities };
526+ for (const name of names) {
527+ const companion = companionByName.get(name);
528+ if (companion) {
529+ coverage = {
530+ tank: coverage.tank + companion.capabilities.tank,
531+ support: coverage.support + companion.capabilities.support,
532+ damage: coverage.damage + companion.capabilities.damage,
533+ control: coverage.control + companion.capabilities.control,
534+ };
535+ }
536+ }
537+ return coverage;
538+}
539+
540+function scoreTeam(names: readonly string[], activeClassId: string): TeamScore {
541+ const avatarStrategy = classStrategy[activeClassId];
542+ if (!avatarStrategy) throw new Error(`Unknown active class: ${activeClassId}`);
543+ const vectors = [
544+ buildStrategies[avatarStrategy].capabilities,
545+ ...names.flatMap((name) => {
546+ const companion = companionByName.get(name);
547+ return companion ? [companion.capabilities] : [];
548+ }),
549+ ];
550+ const specialistCoverage = (["tank", "support", "damage"] as const)
551+ .map((axis) => vectors.filter((vector) => vector[axis] >= 2).length);
552+ const coverage = coverageForTeam(names, activeClassId);
553+ return {
554+ minimumCoreCoverage: Math.min(...specialistCoverage),
555+ coveredCoreAxes: specialistCoverage.filter((value) => value > 0).length,
556+ cappedCoreDepth: specialistCoverage.reduce((total, value) => total + Math.min(2, value), 0),
557+ communityFit: names.reduce(
558+ (total, name) => total + (companionSelectionPriority[name] ?? 0),
559+ 0,
560+ ),
561+ control: coverage.control,
562+ total: coverage.tank + coverage.support + coverage.damage + coverage.control,
563+ };
564+}
565+
566+function compareTeamScore(left: TeamScore, right: TeamScore): number {
567+ const keys: readonly (keyof TeamScore)[] = [
568+ "minimumCoreCoverage",
569+ "coveredCoreAxes",
570+ "cappedCoreDepth",
571+ "communityFit",
572+ "control",
573+ "total",
574+ ];
575+ for (const key of keys) {
576+ const difference = left[key] - right[key];
577+ if (difference !== 0) return difference;
578+ }
579+ return 0;
580+}
581+
582+
583+/**
584+ * Preserves all manual slots and fills only empty slots with companions
585+ * eligible at the shared squad level, without duplicates, by whole-party
586+ * lexicographic coverage.
587+ */
588+export function resolveTeam(
589+ slots: readonly [string, string, string],
590+ activeClassId: string,
591+ effectiveLevel: number,
592+): TeamResolution {
593+ const level = clampLevel(effectiveLevel);
594+ const manualNames = new Set<string>();
595+ for (const name of slots) {
596+ if (name === "") continue;
597+ const companion = companionByName.get(name);
598+ if (!companion) throw new Error(`Unknown manual companion: ${name}`);
599+ if (companion.startLevel > level) {
600+ throw new Error(`${name} requires effective level ${companion.startLevel}`);
601+ }
602+ if (manualNames.has(name)) throw new Error(`Duplicate manual companion: ${name}`);
603+ manualNames.add(name);
604+ }
605+ const manualCount = slots.filter((name) => name !== "").length;
606+ const mode: TeamResolution["mode"] =
607+ manualCount === 3 ? "manual" : manualCount === 0 ? "auto" : "mixed";
608+
609+ if (mode === "manual") {
610+ const names: [string, string, string] = [...slots];
611+ const coverage = coverageForTeam(names, activeClassId);
612+ return {
613+ names,
614+ slots: names.map((name) => ({
615+ name,
616+ effectiveLevel: level,
617+ provenance: "manual" as const,
618+ })) as TeamResolution["slots"],
619+ coverage,
620+ score: scoreTeam(names, activeClassId),
621+ mode,
622+ };
623+ }
624+
625+ const eligibleNames = sortedCompanions
626+ .filter((companion) => companion.startLevel <= level && !manualNames.has(companion.name))
627+ .map((companion) => companion.name);
628+
629+ let bestNames: [string, string, string] | undefined;
630+ let bestCoverage: CapabilityVector | undefined;
631+ let bestScore: TeamScore | undefined;
632+ const current: string[] = [];
633+ const used = new Set(manualNames);
634+
635+ const enumerate = (index: number): void => {
636+ if (index === 3) {
637+ const names = [...current] as [string, string, string];
638+ const coverage = coverageForTeam(names, activeClassId);
639+ const score = scoreTeam(names, activeClassId);
640+ const scoreComparison = bestScore ? compareTeamScore(score, bestScore) : 1;
641+ const tieBreak = bestNames
642+ ? compareText(
643+ names.map((name) => name || "\uffff").join("\u0000"),
644+ bestNames.map((name) => name || "\uffff").join("\u0000"),
645+ )
646+ : -1;
647+ if (!bestNames || scoreComparison > 0 || (scoreComparison === 0 && tieBreak < 0)) {
648+ bestNames = names;
649+ bestCoverage = coverage;
650+ bestScore = score;
651+ }
652+ return;
653+ }
654+
655+ const manualName = slots[index];
656+ if (manualName !== "") {
657+ current.push(manualName);
658+ enumerate(index + 1);
659+ current.pop();
660+ return;
661+ }
662+
663+ const candidates = ["", ...eligibleNames];
664+ for (const name of candidates) {
665+ if (name !== "" && used.has(name)) continue;
666+ current.push(name);
667+ if (name !== "") used.add(name);
668+ enumerate(index + 1);
669+ if (name !== "") used.delete(name);
670+ current.pop();
671+ }
672+ };
673+
674+ enumerate(0);
675+ const names: [string, string, string] =
676+ bestNames ?? ([...slots] as [string, string, string]);
677+ const coverage = bestCoverage ?? coverageForTeam(names, activeClassId);
678+ return {
679+ names,
680+ slots: names.map((name, index) => ({
681+ name,
682+ effectiveLevel: level,
683+ provenance: slots[index] === "" ? "auto" as const : "manual" as const,
684+ })) as TeamResolution["slots"],
685+ coverage,
686+ score: bestScore ?? scoreTeam(names, activeClassId),
687+ mode,
688+ };
689+}
690+
691+/** Avatar first, followed by planned companions in their intact team slots. */
692+export function buildRoster(
693+ avatarLevel: number,
694+ activeClassId: string,
695+ classRanks: ClassRanks,
696+ team: TeamResolution,
697+ personalClassRanks: readonly [number, number, number],
698+): RosterMember[] {
699+ const avatar = planAvatar(activeClassId, classRanks);
700+ const strategyNote = buildStrategies[avatar.strategy].role;
701+ const roster: RosterMember[] = [{
702+ kind: "avatar",
703+ name: "Avatar",
704+ className: avatar.activeClassName,
705+ effectiveLevel: clampLevel(avatarLevel),
706+ rank: avatar.activeRank,
707+ weapons: avatar.weapons,
708+ arts: avatar.arts,
709+ skills: avatar.skills,
710+ skillSlots: avatar.skillSlots,
711+ strategy: avatar.strategy,
712+ note: strategyNote,
713+ planReasons: avatar.planReasons,
714+ source: classProgressionById.get(activeClassId)?.source,
715+ }];
716+
717+ team.slots.forEach((slot, index) => {
718+ if (slot.name === "") return;
719+ const companion = planCompanion(
720+ slot.name,
721+ slot.effectiveLevel,
722+ personalClassRanks[index],
723+ );
724+ roster.push({
725+ kind: "companion",
726+ name: companion.name,
727+ className: companion.className,
728+ effectiveLevel: companion.effectiveLevel,
729+ rank: companion.personalRank,
730+ weapons: companion.weapons,
731+ arts: companion.arts,
732+ skills: companion.skills,
733+ skillSlots: companion.skillSlots,
734+ strategy: companion.strategy,
735+ note: companion.note,
736+ planReasons: companion.planReasons,
737+ source: companion.source,
738+ });
739+ });
740+ return roster;
741+}
742+
743+
744+/** Returns a frame recommendation only when license and pilot-level gates pass. */
745+export function recommendSkellFrame(
746+ request: SkellRecommendationRequest,
747+): SkellFrameRecommendation | null {
748+ const pilotLevel = clampLevel(request.pilotLevel);
749+ if (!request.hasLicense || pilotLevel < 20) return null;
750+
751+ if (pilotLevel < 30) {
752+ return {
753+ ...licenseFrame,
754+ reason: "Guaranteed license frame; no strategy-specific upgrade assumed",
755+ source: skellSource,
756+ };
757+ }
758+
759+ const family = strategyFrameFamily[request.strategy];
760+ const strategyRole = buildStrategies[request.strategy].role[0];
761+ if (pilotLevel >= 60 && request.postgameFrames === true) {
762+ return {
763+ ...postgameFrames[family],
764+ reason: `Explicit postgame-frame choice; ${family} suits ${strategyRole}`,
765+ source: skellSource,
766+ };
767+ }
768+
769+ const tier: 30 | 50 = pilotLevel >= 50 ? 50 : 30;
770+ return {
771+ ...shopFrames[tier][family],
772+ reason: `${family} is the highest eligible shop frame for ${strategyRole}`,
773+ source: skellSource,
774+ };
775+}
776+
777+/**
778+ * Two deterministic alternative frames at the same tier as the main
779+ * recommendation: the next families in the fixed order. None below level 30,
780+ * where the license frame is the only canonical option in our data.
781+ */
782+export function recommendSkellAlternatives(
783+ request: SkellRecommendationRequest,
784+): readonly SkellFrameRecommendation[] {
785+ const pilotLevel = clampLevel(request.pilotLevel);
786+ if (!request.hasLicense || pilotLevel < 30) return [];
787+
788+ const family = strategyFrameFamily[request.strategy];
789+ const start = frameFamilyOrder.indexOf(family);
790+ const families = [1, 2].map(
791+ (offset) => frameFamilyOrder[(start + offset) % frameFamilyOrder.length],
792+ );
793+
794+ if (pilotLevel >= 60 && request.postgameFrames === true) {
795+ return families.map((alt) => ({
796+ ...postgameFrames[alt],
797+ reason: `Alternative postgame frame at the same tier (${alt})`,
798+ source: skellSource,
799+ }));
800+ }
801+
802+ const tier: 30 | 50 = pilotLevel >= 50 ? 50 : 30;
803+ return families.map((alt) => ({
804+ ...shopFrames[tier][alt],
805+ reason: `Alternative shop frame at the same tier (${alt})`,
806+ source: skellSource,
807+ }));
808+}
809+
810+/**
811+ * Attribute-matched weapons and augments for a recommended frame's level
812+ * band. Availability-first: only canonical shop models whose required frame
813+ * level fits; slots without a match stay empty.
814+ */
815+export function recommendSkellLoadout(
816+ strategy: StrategyKey,
817+ frameLevel: number,
818+): SkellLoadout {
819+ const band = ([20, 30, 50, 60] as const)
820+ .filter((candidate) => candidate <= frameLevel)
821+ .at(-1) ?? 20;
822+ return {
823+ weapons: skellWeaponLoadouts[strategy]?.[band] ?? [],
824+ augments: skellAugments[strategy] ?? [],
825+ };
826+}
added src/lib/types.ts +206 -0
new file mode 100644
@@ -0,0 +1,206 @@
1+export type Lang = "en" | "fr";
2+
3+/** Bilingual label: [English, French] — game terms in official English first. */
4+export type LocalizedText = readonly [string, string];
5+
6+export interface ClassEntry {
7+ id: string;
8+ en: string;
9+ fr: string;
10+ tier: number;
11+ ranged: string;
12+ melee: string;
13+ skillSlots: number;
14+ parent?: string;
15+}
16+
17+export type StrategyKey =
18+ | "duelist"
19+ | "bastion"
20+ | "jaguar"
21+ | "astral"
22+ | "mastermind"
23+ | "galactic";
24+
25+export interface CapabilityVector {
26+ tank: number;
27+ support: number;
28+ damage: number;
29+ control: number;
30+}
31+
32+/** Heuristic preferences only; factual loadout availability lives in progression data. */
33+export interface BuildStrategy {
34+ role: LocalizedText;
35+ damage: string;
36+ statPriority: readonly string[];
37+ preferredArts: readonly string[];
38+ preferredSkills: readonly string[];
39+ capabilities: CapabilityVector;
40+ skellRole: LocalizedText;
41+}
42+
43+export interface ClassArtFact {
44+ name: string;
45+ weapon: string;
46+ rank: number;
47+}
48+
49+export interface ClassSkillFact {
50+ name: string;
51+ rank: number;
52+}
53+
54+export interface ClassProgressionRecord {
55+ classId: string;
56+ skillSlots: number;
57+ arts: readonly ClassArtFact[];
58+ skills: readonly ClassSkillFact[];
59+ source: string;
60+ sourceUrl: string;
61+}
62+
63+export interface CompanionUnlockFact {
64+ name: string;
65+ rank: number;
66+}
67+
68+export interface CompanionFact {
69+ name: string;
70+ className: string;
71+ ranged: string;
72+ melee: string;
73+ startLevel: number;
74+ startRank: number;
75+ maxRank: number;
76+ skillSlots: number;
77+ defaultArts: readonly string[];
78+ arts: readonly CompanionUnlockFact[];
79+ skills: readonly CompanionUnlockFact[];
80+ source: string;
81+ strategy: StrategyKey;
82+ capabilities: CapabilityVector;
83+}
84+
85+export type ClassRanks = Readonly<Record<string, number>>;
86+
87+export interface UnlockSource {
88+ kind: "class" | "companion";
89+ id: string;
90+ url: string;
91+ citation: string;
92+}
93+
94+export interface ArtSelection {
95+ name: string;
96+ weapon?: string;
97+ unlockRank: number;
98+ source: UnlockSource;
99+ reason: string;
100+}
101+
102+export interface SkillSelection {
103+ name: string;
104+ unlockRank: number;
105+ source: UnlockSource;
106+ reason: string;
107+}
108+
109+export interface WeaponPair {
110+ ranged: string;
111+ melee: string;
112+}
113+
114+export interface AvatarPlan {
115+ activeClassId: string;
116+ activeClassName: string;
117+ activeRank: number;
118+ normalizedClassRanks: Record<string, number>;
119+ strategy: StrategyKey;
120+ legalWeaponPairs: readonly WeaponPair[];
121+ weapons: WeaponPair;
122+ arts: readonly ArtSelection[];
123+ skills: readonly SkillSelection[];
124+ skillSlots: number;
125+ planReasons: readonly string[];
126+}
127+
128+export interface CompanionPlan {
129+ name: string;
130+ className: string;
131+ effectiveLevel: number;
132+ personalRank: number;
133+ weapons: WeaponPair;
134+ strategy: StrategyKey;
135+ capabilities: CapabilityVector;
136+ arts: readonly ArtSelection[];
137+ skills: readonly SkillSelection[];
138+ skillSlots: number;
139+ note: LocalizedText;
140+ source: string;
141+ planReasons: readonly string[];
142+}
143+
144+export type TeamMode = "manual" | "mixed" | "auto";
145+export type SlotProvenance = "manual" | "auto";
146+
147+export interface ResolvedTeamSlot {
148+ name: string;
149+ effectiveLevel: number;
150+ provenance: SlotProvenance;
151+}
152+
153+export interface TeamScore {
154+ minimumCoreCoverage: number;
155+ coveredCoreAxes: number;
156+ cappedCoreDepth: number;
157+ communityFit: number;
158+ control: number;
159+ total: number;
160+}
161+
162+export interface TeamResolution {
163+ names: [string, string, string];
164+ slots: [ResolvedTeamSlot, ResolvedTeamSlot, ResolvedTeamSlot];
165+ coverage: CapabilityVector;
166+ score: TeamScore;
167+ mode: TeamMode;
168+}
169+
170+export interface RosterMember {
171+ kind: "avatar" | "companion";
172+ name: string;
173+ className: string;
174+ effectiveLevel: number;
175+ rank: number;
176+ weapons: WeaponPair;
177+ arts: readonly ArtSelection[];
178+ skills: readonly SkillSelection[];
179+ skillSlots: number;
180+ strategy: StrategyKey;
181+ note: LocalizedText;
182+ planReasons: readonly string[];
183+ source?: string;
184+}
185+
186+
187+export interface SkellFrameRecommendation {
188+ frame: string;
189+ requiredLevel: number;
190+ acquisition: string;
191+ reason: string;
192+ source: string;
193+}
194+
195+export interface SkellWeaponPick {
196+ name: string;
197+ slot: string;
198+ attribute: string;
199+ acquisition: string;
200+}
201+
202+export interface SkellLoadout {
203+ weapons: readonly SkellWeaponPick[];
204+ augments: readonly string[];
205+}
206+
new file mode 100644
@@ -0,0 +1,206 @@
1+export type Lang = "en" | "fr";
2+
3+/** Bilingual label: [English, French] — game terms in official English first. */
4+export type LocalizedText = readonly [string, string];
5+
6+export interface ClassEntry {
7+ id: string;
8+ en: string;
9+ fr: string;
10+ tier: number;
11+ ranged: string;
12+ melee: string;
13+ skillSlots: number;
14+ parent?: string;
15+}
16+
17+export type StrategyKey =
18+ | "duelist"
19+ | "bastion"
20+ | "jaguar"
21+ | "astral"
22+ | "mastermind"
23+ | "galactic";
24+
25+export interface CapabilityVector {
26+ tank: number;
27+ support: number;
28+ damage: number;
29+ control: number;
30+}
31+
32+/** Heuristic preferences only; factual loadout availability lives in progression data. */
33+export interface BuildStrategy {
34+ role: LocalizedText;
35+ damage: string;
36+ statPriority: readonly string[];
37+ preferredArts: readonly string[];
38+ preferredSkills: readonly string[];
39+ capabilities: CapabilityVector;
40+ skellRole: LocalizedText;
41+}
42+
43+export interface ClassArtFact {
44+ name: string;
45+ weapon: string;
46+ rank: number;
47+}
48+
49+export interface ClassSkillFact {
50+ name: string;
51+ rank: number;
52+}
53+
54+export interface ClassProgressionRecord {
55+ classId: string;
56+ skillSlots: number;
57+ arts: readonly ClassArtFact[];
58+ skills: readonly ClassSkillFact[];
59+ source: string;
60+ sourceUrl: string;
61+}
62+
63+export interface CompanionUnlockFact {
64+ name: string;
65+ rank: number;
66+}
67+
68+export interface CompanionFact {
69+ name: string;
70+ className: string;
71+ ranged: string;
72+ melee: string;
73+ startLevel: number;
74+ startRank: number;
75+ maxRank: number;
76+ skillSlots: number;
77+ defaultArts: readonly string[];
78+ arts: readonly CompanionUnlockFact[];
79+ skills: readonly CompanionUnlockFact[];
80+ source: string;
81+ strategy: StrategyKey;
82+ capabilities: CapabilityVector;
83+}
84+
85+export type ClassRanks = Readonly<Record<string, number>>;
86+
87+export interface UnlockSource {
88+ kind: "class" | "companion";
89+ id: string;
90+ url: string;
91+ citation: string;
92+}
93+
94+export interface ArtSelection {
95+ name: string;
96+ weapon?: string;
97+ unlockRank: number;
98+ source: UnlockSource;
99+ reason: string;
100+}
101+
102+export interface SkillSelection {
103+ name: string;
104+ unlockRank: number;
105+ source: UnlockSource;
106+ reason: string;
107+}
108+
109+export interface WeaponPair {
110+ ranged: string;
111+ melee: string;
112+}
113+
114+export interface AvatarPlan {
115+ activeClassId: string;
116+ activeClassName: string;
117+ activeRank: number;
118+ normalizedClassRanks: Record<string, number>;
119+ strategy: StrategyKey;
120+ legalWeaponPairs: readonly WeaponPair[];
121+ weapons: WeaponPair;
122+ arts: readonly ArtSelection[];
123+ skills: readonly SkillSelection[];
124+ skillSlots: number;
125+ planReasons: readonly string[];
126+}
127+
128+export interface CompanionPlan {
129+ name: string;
130+ className: string;
131+ effectiveLevel: number;
132+ personalRank: number;
133+ weapons: WeaponPair;
134+ strategy: StrategyKey;
135+ capabilities: CapabilityVector;
136+ arts: readonly ArtSelection[];
137+ skills: readonly SkillSelection[];
138+ skillSlots: number;
139+ note: LocalizedText;
140+ source: string;
141+ planReasons: readonly string[];
142+}
143+
144+export type TeamMode = "manual" | "mixed" | "auto";
145+export type SlotProvenance = "manual" | "auto";
146+
147+export interface ResolvedTeamSlot {
148+ name: string;
149+ effectiveLevel: number;
150+ provenance: SlotProvenance;
151+}
152+
153+export interface TeamScore {
154+ minimumCoreCoverage: number;
155+ coveredCoreAxes: number;
156+ cappedCoreDepth: number;
157+ communityFit: number;
158+ control: number;
159+ total: number;
160+}
161+
162+export interface TeamResolution {
163+ names: [string, string, string];
164+ slots: [ResolvedTeamSlot, ResolvedTeamSlot, ResolvedTeamSlot];
165+ coverage: CapabilityVector;
166+ score: TeamScore;
167+ mode: TeamMode;
168+}
169+
170+export interface RosterMember {
171+ kind: "avatar" | "companion";
172+ name: string;
173+ className: string;
174+ effectiveLevel: number;
175+ rank: number;
176+ weapons: WeaponPair;
177+ arts: readonly ArtSelection[];
178+ skills: readonly SkillSelection[];
179+ skillSlots: number;
180+ strategy: StrategyKey;
181+ note: LocalizedText;
182+ planReasons: readonly string[];
183+ source?: string;
184+}
185+
186+
187+export interface SkellFrameRecommendation {
188+ frame: string;
189+ requiredLevel: number;
190+ acquisition: string;
191+ reason: string;
192+ source: string;
193+}
194+
195+export interface SkellWeaponPick {
196+ name: string;
197+ slot: string;
198+ attribute: string;
199+ acquisition: string;
200+}
201+
202+export interface SkellLoadout {
203+ weapons: readonly SkellWeaponPick[];
204+ augments: readonly string[];
205+}
206+
added tsconfig.json +34 -0
new file mode 100644
@@ -0,0 +1,34 @@
1+{
2+ "compilerOptions": {
3+ "target": "ES2017",
4+ "lib": ["dom", "dom.iterable", "esnext"],
5+ "allowJs": true,
6+ "skipLibCheck": true,
7+ "strict": true,
8+ "noEmit": true,
9+ "esModuleInterop": true,
10+ "module": "esnext",
11+ "moduleResolution": "bundler",
12+ "resolveJsonModule": true,
13+ "isolatedModules": true,
14+ "jsx": "react-jsx",
15+ "incremental": true,
16+ "plugins": [
17+ {
18+ "name": "next"
19+ }
20+ ],
21+ "paths": {
22+ "@/*": ["./*"]
23+ }
24+ },
25+ "include": [
26+ "next-env.d.ts",
27+ "**/*.ts",
28+ "**/*.tsx",
29+ ".next/types/**/*.ts",
30+ ".next/dev/types/**/*.ts",
31+ "**/*.mts"
32+ ],
33+ "exclude": ["node_modules"]
34+}
new file mode 100644
@@ -0,0 +1,34 @@
1+{
2+ "compilerOptions": {
3+ "target": "ES2017",
4+ "lib": ["dom", "dom.iterable", "esnext"],
5+ "allowJs": true,
6+ "skipLibCheck": true,
7+ "strict": true,
8+ "noEmit": true,
9+ "esModuleInterop": true,
10+ "module": "esnext",
11+ "moduleResolution": "bundler",
12+ "resolveJsonModule": true,
13+ "isolatedModules": true,
14+ "jsx": "react-jsx",
15+ "incremental": true,
16+ "plugins": [
17+ {
18+ "name": "next"
19+ }
20+ ],
21+ "paths": {
22+ "@/*": ["./*"]
23+ }
24+ },
25+ "include": [
26+ "next-env.d.ts",
27+ "**/*.ts",
28+ "**/*.tsx",
29+ ".next/types/**/*.ts",
30+ ".next/dev/types/**/*.ts",
31+ "**/*.mts"
32+ ],
33+ "exclude": ["node_modules"]
34+}
added tsconfig.tsbuildinfo +1 -0
new file mode 100644
@@ -0,0 +1 @@
1+{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./src/lib/types.ts","./src/data/arms.ts","./src/data/builds.ts","./src/data/classes.ts","./src/data/companions.ts","./src/data/i18n.ts","./src/data/progression.ts","./src/data/skellWeapons.ts","./src/data/skells.ts","./src/lib/engine.ts","./src/lib/engine.test.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./app/layout.tsx","./src/components/ControlPanel.tsx","./src/components/BuildCard.tsx","./src/components/ResultsSection.tsx","./src/components/SiteFooter.tsx","./src/components/SquadPanel.tsx","./src/components/Topbar.tsx","./src/components/TeamBuilder.tsx","./app/page.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[97,146,163,164,488,489,490,491,561],[97,146,163,164,561,563],[97,146,163,164,231,532,552,560,561,563,564],[97,146,163,164,488,489,490,491,563],[97,146,163,164,231,532,535,552,560,561,563],[97,146,163,164,231,530,533,551,561,563],[97,146,163,164,231,559,561,563],[97,146,163,164,533,534,535,561,563],[97,146,163,164,231,533,561,563],[97,143,144,146,163,164,561,563],[97,145,146,163,164,561,563],[146,163,164,561,563],[97,146,151,163,164,181,561,563],[97,146,147,152,157,163,164,166,178,189,561,563],[97,146,147,148,157,163,164,166,561,563],[92,93,94,97,146,163,164,561,563],[97,146,149,163,164,190,561,563],[97,146,150,151,158,163,164,167,561,563],[97,146,151,163,164,178,186,561,563],[97,146,152,154,157,163,164,166,561,563],[97,145,146,153,163,164,561,563],[97,146,154,155,163,164,561,563],[97,146,156,157,163,164,561,563],[97,145,146,157,163,164,561,563],[97,146,157,158,159,163,164,178,189,561,563],[97,146,157,158,159,163,164,173,178,181,561,563],[97,138,146,154,157,160,163,164,166,178,189,561,563],[97,146,157,158,160,161,163,164,166,178,186,189,561,563],[97,146,160,162,163,164,178,186,189,561,563],[95,96,97,98,99,100,101,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,561,563],[97,146,157,163,164,561,563],[97,146,163,164,165,189,561,563],[97,146,154,157,163,164,166,178,561,563],[97,146,163,164,167,561,563],[97,146,163,164,168,561,563],[97,145,146,163,164,169,561,563],[97,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,561,563],[97,146,163,164,171,561,563],[97,146,163,164,172,561,563],[97,146,157,163,164,173,174,561,563],[97,146,163,164,173,175,190,192,561,563],[97,146,158,163,164,561,563],[97,146,157,163,164,178,179,181,561,563],[97,146,163,164,180,181,561,563],[97,146,163,164,178,179,561,563],[97,146,163,164,181,561,563],[97,146,163,164,182,561,563],[97,143,146,163,164,178,183,189,561,563],[97,146,157,163,164,184,185,561,563],[97,146,163,164,184,185,561,563],[97,146,151,163,164,166,178,186,561,563],[97,146,163,164,187,561,563],[97,146,163,164,166,188,561,563],[97,146,160,163,164,172,189,561,563],[97,146,151,163,164,190,561,563],[97,146,163,164,178,191,561,563],[97,146,163,164,165,192,561,563],[97,146,163,164,193,561,563],[97,138,146,163,164,561,563],[97,138,146,157,159,163,164,169,178,181,189,191,192,194,561,563],[97,146,163,164,178,195,561,563],[85,89,97,146,163,164,197,198,199,200,201,483,528,561,563],[85,97,146,163,164,561,563],[85,89,97,146,163,164,197,198,199,200,464,483,528,561,563],[85,89,97,146,163,164,197,198,200,201,483,528,561,563],[85,97,146,163,164,201,464,465,561,563],[85,97,146,163,164,201,464,561,563],[85,89,97,146,163,164,198,199,200,201,483,528,561,563],[85,89,97,146,163,164,197,199,200,201,483,528,561,563],[83,84,97,146,163,164,561,563],[97,146,163,164,486,561,563],[97,146,163,164,488,489,490,491,561,563],[97,146,163,164,434,497,498,561,563],[97,146,163,164,206,207,209,221,245,360,371,479,561,563],[97,146,163,164,209,240,241,242,244,479,561,563],[97,146,163,164,209,377,379,381,382,384,479,481,561,563],[97,146,163,164,209,243,280,479,561,563],[97,146,163,164,207,209,220,221,227,233,238,359,360,361,370,479,481,561,563],[97,146,163,164,479,561,563],[97,146,163,164,216,222,241,261,356,561,563],[97,146,163,164,209,561,563],[97,146,163,164,202,216,222,561,563],[97,146,163,164,388,561,563],[97,146,163,164,385,386,388,561,563],[97,146,163,164,385,387,479,561,563],[97,146,160,163,164,261,458,476,561,563],[97,146,160,163,164,332,335,351,356,476,561,563],[97,146,160,163,164,304,476,561,563],[97,146,163,164,364,561,563],[97,146,163,164,363,364,365,561,563],[97,146,163,164,363,561,563],[91,97,146,160,163,164,202,209,221,227,233,239,241,245,246,259,260,327,357,358,371,479,483,561,563],[97,146,163,164,206,209,243,280,377,378,383,479,531,561,563],[97,146,163,164,243,531,561,563],[97,146,163,164,206,260,429,479,531,561,563],[97,146,163,164,531,561,563],[97,146,163,164,209,243,244,531,561,563],[97,146,163,164,380,531,561,563],[97,146,163,164,246,359,362,369,561,563],[85,97,146,163,164,434,561,563],[97,146,163,164,172,216,231,561,563],[97,146,163,164,216,231,561,563],[85,97,146,163,164,301,561,563],[85,97,146,163,164,231,561,563],[85,97,146,163,164,222,231,434,561,563],[97,146,163,164,216,287,301,302,513,520,561,563],[97,146,163,164,286,514,515,516,517,519,561,563],[97,146,163,164,337,561,563],[97,146,163,164,337,338,561,563],[97,146,163,164,220,222,289,290,561,563],[97,146,163,164,222,296,297,561,563],[97,146,163,164,222,291,299,561,563],[97,146,163,164,296,561,563],[97,146,163,164,214,222,289,290,291,292,293,294,295,296,299,561,563],[97,146,163,164,222,289,296,297,298,300,561,563],[97,146,163,164,222,290,292,293,561,563],[97,146,163,164,290,292,295,297,561,563],[97,146,163,164,518,561,563],[97,146,163,164,222,561,563],[85,97,146,163,164,210,507,561,563],[85,97,146,163,164,189,561,563],[85,97,146,163,164,243,278,561,563],[85,97,146,163,164,243,371,561,563],[97,146,163,164,276,281,561,563],[85,97,146,163,164,277,485,561,563],[97,146,163,164,549,561,563],[85,89,97,146,160,163,164,197,198,199,200,201,483,527,561,563],[97,146,160,163,164,222,561,563],[97,146,160,163,164,221,226,307,324,366,367,371,426,428,479,480,561,563],[97,146,163,164,259,368,561,563],[97,146,163,164,483,561,563],[97,146,163,164,208,561,563],[85,97,146,163,164,213,216,431,447,449,561,563],[97,146,163,164,172,216,431,446,447,448,530,561,563],[97,146,163,164,440,441,442,443,444,445,561,563],[97,146,163,164,442,561,563],[97,146,163,164,446,561,563],[97,146,163,164,231,395,396,398,561,563],[85,97,146,163,164,222,389,390,391,392,397,561,563],[97,146,163,164,395,397,561,563],[97,146,163,164,393,561,563],[97,146,163,164,394,561,563],[85,97,146,163,164,231,277,485,561,563],[85,97,146,163,164,231,484,485,561,563],[85,97,146,163,164,231,485,561,563],[97,146,163,164,324,325,561,563],[97,146,163,164,325,561,563],[97,146,160,163,164,480,485,561,563],[97,146,163,164,354,561,563],[97,145,146,163,164,353,561,563],[97,146,163,164,216,222,228,230,332,345,349,351,428,431,468,469,476,480,561,563],[97,146,163,164,222,271,293,561,563],[97,146,163,164,332,343,346,351,561,563],[85,97,146,163,164,213,216,332,335,351,354,388,435,436,437,438,439,450,451,452,453,454,455,456,457,531,561,563],[97,146,163,164,213,216,241,332,339,340,341,344,345,561,563],[97,146,163,164,178,222,241,343,350,431,432,476,561,563],[97,146,163,164,347,561,563],[97,146,160,163,164,172,210,222,226,236,268,269,272,324,327,392,426,427,468,479,480,481,483,531,561,563],[97,146,163,164,213,214,216,561,563],[97,146,163,164,332,561,563],[97,145,146,163,164,241,268,269,326,327,328,329,330,331,480,561,563],[97,146,163,164,351,561,563],[97,145,146,163,164,215,216,226,230,266,332,339,340,341,342,343,346,347,348,349,350,469,561,563],[97,146,160,163,164,266,267,339,480,481,561,563],[97,146,163,164,241,269,324,327,332,428,480,561,563],[97,146,160,163,164,479,481,561,563],[97,146,160,163,164,178,476,480,481,561,563],[97,146,160,163,164,172,202,216,221,228,230,233,236,243,263,268,269,270,271,272,307,308,310,313,315,318,319,320,321,323,371,426,428,476,479,480,481,561,563],[97,146,160,163,164,178,561,563],[97,146,163,164,209,210,211,239,476,477,478,483,485,531,561,563],[97,146,163,164,206,207,479,561,563],[97,146,163,164,400,561,563],[97,146,160,163,164,178,189,218,384,388,389,390,391,392,398,399,531,561,563],[97,146,163,164,172,189,202,216,218,230,233,269,308,313,323,324,377,404,405,406,412,415,416,426,428,476,479,561,563],[97,146,163,164,233,239,246,259,269,327,479,561,563],[97,146,160,163,164,189,210,221,230,269,410,476,479,561,563],[97,146,163,164,430,561,563],[97,146,160,163,164,400,413,414,423,561,563],[97,146,163,164,476,479,561,563],[97,146,163,164,329,469,561,563],[97,146,163,164,230,268,371,485,561,563],[97,146,160,163,164,172,208,313,373,377,406,412,415,418,476,561,563],[97,146,160,163,164,246,259,377,419,561,563],[97,146,163,164,209,270,371,421,479,481,561,563],[97,146,160,163,164,189,392,479,561,563],[97,146,160,163,164,243,270,371,372,373,382,400,420,422,479,561,563],[91,97,146,160,163,164,268,425,483,485,561,563],[97,146,163,164,322,426,561,563],[97,146,160,163,164,172,216,219,221,222,228,230,236,245,246,259,269,272,308,310,320,323,324,371,404,405,406,407,409,411,426,428,476,485,561,563],[97,146,160,163,164,178,246,412,417,423,476,561,563],[97,146,163,164,249,250,251,252,253,254,255,256,257,258,561,563],[97,146,163,164,263,314,561,563],[97,146,163,164,316,561,563],[97,146,163,164,314,561,563],[97,146,163,164,316,317,561,563],[97,146,160,163,164,220,221,222,226,227,480,561,563],[97,146,160,163,164,172,208,210,228,232,268,271,272,306,426,476,481,483,485,561,563],[97,146,160,163,164,172,189,212,219,220,230,232,269,424,469,475,480,561,563],[97,146,163,164,339,561,563],[97,146,163,164,340,561,563],[97,146,163,164,222,233,468,561,563],[97,146,163,164,341,561,563],[97,146,163,164,215,561,563],[97,146,163,164,217,229,561,563],[97,146,160,163,164,217,221,228,561,563],[97,146,163,164,224,229,561,563],[97,146,163,164,225,561,563],[97,146,163,164,217,218,561,563],[97,146,163,164,217,273,561,563],[97,146,163,164,217,561,563],[97,146,163,164,219,263,312,561,563],[97,146,163,164,311,561,563],[97,146,163,164,216,218,219,561,563],[97,146,163,164,219,309,561,563],[97,146,163,164,216,218,561,563],[97,146,163,164,268,371,561,563],[97,146,163,164,468,561,563],[97,146,160,163,164,189,228,230,234,268,371,425,428,431,432,433,459,460,463,467,469,476,480,561,563],[97,146,163,164,282,285,287,288,301,302,561,563],[85,97,146,163,164,199,200,201,231,461,462,561,563],[85,97,146,163,164,199,200,201,231,461,462,466,561,563],[97,146,163,164,355,561,563],[97,146,163,164,241,262,267,268,332,333,334,335,336,338,351,352,354,357,425,428,479,481,561,563],[97,146,163,164,301,561,563],[97,146,160,163,164,306,476,561,563],[97,146,163,164,306,561,563],[97,146,160,163,164,228,274,303,305,307,425,476,483,485,561,563],[97,146,163,164,282,283,284,285,287,288,301,302,484,561,563],[91,97,146,160,163,164,172,189,217,218,230,236,268,269,272,371,423,424,426,476,479,480,483,561,563],[97,146,163,164,213,216,223,561,563],[97,146,163,164,267,269,401,404,561,563],[97,146,163,164,267,402,470,471,472,473,474,561,563],[97,146,160,163,164,263,479,561,563],[97,146,160,163,164,561,563],[97,146,163,164,266,351,561,563],[97,146,163,164,265,561,563],[97,146,163,164,267,320,561,563],[97,146,163,164,264,266,479,561,563],[97,146,160,163,164,212,267,401,402,403,476,479,480,561,563],[85,97,146,163,164,216,222,300,561,563],[85,97,146,163,164,214,561,563],[97,146,163,164,204,205,561,563],[85,97,146,163,164,210,561,563],[85,97,146,163,164,216,286,561,563],[85,91,97,146,163,164,268,272,483,485,561,563],[97,146,163,164,210,507,508,561,563],[85,97,146,163,164,281,561,563],[85,97,146,163,164,172,189,208,275,277,279,280,485,561,563],[97,146,163,164,216,243,480,561,563],[97,146,163,164,216,408,561,563],[85,97,146,158,160,163,164,172,206,208,281,379,483,484,561,563],[85,97,146,163,164,197,198,199,200,201,483,528,561,563],[85,86,87,88,89,97,146,163,164,561,563],[97,146,151,163,164,561,563],[97,146,163,164,374,375,376,561,563],[97,146,163,164,374,561,563],[85,89,97,146,160,162,163,164,172,196,197,198,199,200,201,202,208,236,241,418,446,481,482,485,528,561,563],[97,146,163,164,493,561,563],[97,146,163,164,495,561,563],[97,146,163,164,499,561,563],[97,146,163,164,550,561,563],[97,146,163,164,501,561,563],[97,146,163,164,503,504,505,561,563],[97,146,163,164,509,561,563],[90,97,146,163,164,487,492,494,496,500,502,506,510,512,522,523,525,529,530,531,532,561,563],[97,146,163,164,511,561,563],[97,146,163,164,521,561,563],[97,146,163,164,277,561,563],[97,146,163,164,524,561,563],[97,145,146,163,164,267,401,402,404,470,471,473,474,526,528,561,563],[97,146,163,164,196,561,563],[97,146,163,164,178,196,561,563],[97,110,114,146,163,164,189,561,563],[97,110,146,163,164,178,189,561,563],[97,105,146,163,164,561,563],[97,107,110,146,163,164,186,189,561,563],[97,146,163,164,166,186,561,563],[97,105,146,163,164,196,561,563],[97,107,110,146,163,164,166,189,561,563],[97,102,103,106,109,146,157,163,164,178,189,561,563],[97,110,117,146,163,164,561,563],[97,102,108,146,163,164,561,563],[97,110,131,132,146,163,164,561,563],[97,106,110,146,163,164,181,189,196,561,563],[97,131,146,163,164,196,561,563],[97,104,105,146,163,164,196,561,563],[97,110,146,163,164,561,563],[97,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,146,163,164,561,563],[97,110,125,146,163,164,561,563],[97,110,117,118,146,163,164,561,563],[97,108,110,118,119,146,163,164,561,563],[97,109,146,163,164,561,563],[97,102,105,110,146,163,164,561,563],[97,110,114,118,119,146,163,164,561,563],[97,114,146,163,164,561,563],[97,108,110,113,146,163,164,189,561,563],[97,102,107,110,117,146,163,164,561,563],[97,146,163,164,178,561,563],[97,105,110,131,146,163,164,194,196,561,563],[97,146,163,164,231,538,539,540,543,547,561,563],[97,146,163,164,231,538,541,543,547,561,563],[85,97,146,163,164,231,538,543,547,554,561,563],[97,146,163,164,231,543,561,563],[97,146,163,164,231,542,543,561,563],[85,97,146,163,164,231,538,541,543,547,553,555,556,557,558,561,563],[97,146,163,164,231,538,543,561,563],[97,146,163,164,231,538,561,563],[97,144,146,163,164,183,231,542,544,547,561,563],[97,146,163,164,231,538,540,541,542,544,545,546,561,563],[97,146,163,164,231,561,563]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"814d5c7384f3ca276e9dc4bcfde5545801a3ea0bfae09916b3336774e662fd1b","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"d61e0a64cd175208ac0b83670151a9a6b5916f0d1ffcdc5c29c90b1cebfc5045","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"66be1299a7a3129ceb488b340c291cf575bebb0e337f92e169dec38231472e34","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"b838d4c72740eb0afd284bf7575b74c624b105eff2e8c7b4aeead57e7ac320ff","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"48dcc919f76c040a999c0d46d2bf25ab089645ca21b837f120b222f56a86cd76","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"cd9304972e6d616197fb44fce00540a904f38b54306a1951b5dbeaf3c01ab5bd","impliedFormat":1},{"version":"77438e2c397a3db78407621cfc57241a305b310ddea2c185f1d555248297f587","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"7715134a0cf07dd41a9da2895d708625a3a303a0385e355ecaaf0b8bfaef2550","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e5c939d896565dcac0f6fbdbada11284e7728ef26a069561c09aa5aa4a788393","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"5a16e93d5d53d987dddda1ec606c9821f6bd31d1bdf0635e05e3841312cefa8b","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"b55eb9f72166093b5460d34b34f5d8699c968de3bc3fc696e40f2c93f2ebf650","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"c30436b130b6218b7714314dc41d3f459590db4bdf099eecd51cb1bda32109a8","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"6ee598cdfdd0fa52039dca135b3dfff7b49035dc13292143e0a93843e3861967","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"eb5acb58487367e502d994b57e2c58255d8241f481ea8efa8e79af23af3f41c2","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"f282cb0bc62e0cc771d4c2e7ece6359a5f4a3dff664584e97476fd37154816bb","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"a384610388221cd70cffb4503cee7853b8b076f2b4a55324b20a4bdbd25a3538","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651",{"version":"f5a1676c44601c4291320391570b3a9aafbae9a6bea721b62dd186da9a827911","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"2416d0d4c9ebbd4024126ab3301cb91dc1eeed7d44dd05aed67673b511ed17b6","signature":"ce0ffe631a9378a6bd5c2f1f8666814bc8d652e271a8fa8fd2fbf8285b42d41b"},{"version":"c91b304a3ac178ac2f76b66849e748f24e02c6590d20822f16d043a0128195b0","signature":"9f51faf228d2d846d029163704048e067899eabe3a918812cf4fc2012797d6bd"},"0c47b3c89a89e3ab58d589e45a366640942126180a65a8046a3bb313619f5b16","d2a550e6c7f7b40bbe0d1edf75cf75c0d7786ce13995942be1b91cc94a2d3ebd","212641fbc18ca00ce5b86a1d38b8d2b6bdb25edb0a4b33aa0b1f432e451a7fe0",{"version":"00796db515bf7113de1655012c3e76eefd520ca7781850d9f22aa70393ac9b6c","signature":"bce8d9e7d0eb2e6bd87f370b2423cd88478e9976ba93a0d47a8f938663d7641a"},"48e6b3f0bd8522db70ffadce7163f4f32cdc94caa5f4123069476373b1bbdb07",{"version":"000fd9e9b613e4e7fe7bed5d88055b88debb457c5d2627bdc6e71b86e82ead7d","signature":"5bc959e9f06337da9f6a4b2f93d16241b555bf16b9eb8f92da54345b98e92660"},{"version":"671c373f2b82d6dfae3e4645d81cef22a655318f8901d0026c90f86e00d98934","signature":"e4617002b911948b96cb103cf91de9a393da95376df0d95dd4b1772393660214"},{"version":"5c483707086727b2ddc0e0ad27b5c85f1b6b3d05073d1da32f16240b0abe7aa5","signature":"f41b606a134a3d2dd2459087028332e5ff4c2a9c4d1edba462f7b994a2171961"},{"version":"8bbc48d0aa0989a5997918da017f795cfda4ee15f0aedf646007f87f8bcdf5ed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"01d3478be006d10a3abefe929996ed5decf8d809c242bfe7f6de3741e4e761f2","signature":"01a977ade994fe0de990222140f158a0dc3b03529994c449aa39333d0facac02"},"bffef72149873238af0be5150619ce1a7aace623716b0fd07cd844b01c92db13",{"version":"e32d83eedbc19c32a21910d66a8c10113146ff920a3825f17d3764d239683b06","signature":"61ab01628505db9d3ef340b0546d4e9acbe3bd07784caaf6ab8ce150ab1f4c17"},"3070f5c17e6123f474c2a2c5aa08fd6ead063e108e50914a4fe789e0e578ac0a","084c4993b66cd903125a835a61a122716256b53716f8dd6761722b6944dc42c3","7f547bbf58c638b5be167fae5fa5291f9470424f5ab4277e9ad336cc3ad9dc46","c331b7056801e4bc7b46732e77173277b55e0367de6618bae2f85c7c7ce27b56","c204df8b51ac1f124513782ebc1e2596c3edfce22aad7d79f1a18f0500287684","d46f111f0daf006ae96e904cd3c8e24d4e3ca682b455001af31e8207a1b352fd","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","8c738d7ab02122bec55d98eab2f5e875f5306ebffe56a6be96f2da0916a7ea71","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"a384610388221cd70cffb4503cee7853b8b076f2b4a55324b20a4bdbd25a3538","affectsGlobalScope":true},"ac965c40df1c4a3d53cebda90c50063ebda4522b0a054741dc3d2bd98bc852e6",{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[[535,548],[552,565]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[563,1],[564,2],[565,3],[561,4],[535,2],[562,5],[552,6],[560,7],[536,8],[537,9],[379,2],[566,2],[567,2],[568,2],[143,10],[144,10],[145,11],[97,12],[146,13],[147,14],[148,15],[92,2],[95,16],[93,2],[94,2],[149,17],[150,18],[151,19],[152,20],[153,21],[154,22],[155,22],[156,23],[157,24],[158,25],[159,26],[98,2],[96,2],[160,27],[161,28],[162,29],[196,30],[163,31],[164,2],[165,32],[166,33],[167,34],[168,35],[169,36],[170,37],[171,38],[172,39],[173,40],[174,40],[175,41],[176,2],[177,42],[178,43],[180,44],[179,45],[181,46],[182,47],[183,48],[184,49],[185,50],[186,51],[187,52],[188,53],[189,54],[190,55],[191,56],[192,57],[193,58],[99,2],[100,2],[101,2],[139,59],[140,2],[141,2],[142,46],[194,60],[195,61],[200,62],[464,63],[201,64],[199,65],[466,66],[465,67],[197,68],[462,2],[198,69],[83,2],[85,70],[461,63],[231,63],[84,2],[487,71],[492,72],[499,73],[482,74],[235,2],[243,75],[383,76],[386,77],[358,2],[371,78],[378,79],[260,2],[360,2],[241,2],[357,80],[403,81],[242,2],[233,82],[385,83],[387,84],[388,85],[459,86],[352,87],[305,88],[365,89],[366,90],[364,91],[363,2],[359,92],[384,93],[244,94],[429,2],[430,95],[271,96],[245,97],[272,96],[308,96],[211,96],[381,98],[380,2],[370,99],[477,2],[220,2],[498,100],[437,101],[438,102],[434,103],[516,2],[335,2],[439,104],[435,105],[521,106],[520,107],[515,2],[286,2],[338,108],[337,2],[514,109],[436,63],[291,110],[298,111],[300,112],[290,2],[295,113],[297,114],[299,115],[294,116],[292,2],[296,117],[517,2],[513,2],[519,118],[518,2],[289,119],[508,120],[511,121],[279,122],[278,123],[277,124],[524,63],[276,125],[265,2],[526,2],[550,126],[549,2],[527,63],[528,127],[203,2],[367,128],[368,129],[369,130],[207,2],[372,2],[227,131],[202,2],[451,63],[209,132],[450,133],[449,134],[440,2],[441,2],[448,2],[443,2],[446,135],[442,2],[444,136],[447,137],[445,136],[240,2],[237,2],[238,96],[392,2],[397,138],[398,139],[396,140],[394,141],[395,142],[390,2],[457,104],[232,104],[486,143],[493,144],[497,145],[326,146],[325,2],[320,2],[473,147],[481,148],[353,149],[354,150],[432,151],[342,2],[455,152],[330,63],[347,153],[458,154],[343,2],[346,155],[344,2],[456,156],[453,157],[452,2],[454,2],[350,2],[428,158],[215,159],[328,160],[332,161],[348,162],[351,163],[340,164],[333,165],[480,166],[406,167],[324,168],[212,169],[479,170],[208,171],[399,172],[391,2],[400,173],[417,174],[389,2],[416,175],[91,2],[411,176],[236,2],[431,177],[407,2],[221,2],[223,2],[362,2],[415,178],[239,2],[263,179],[349,180],[269,181],[329,2],[414,2],[393,2],[419,182],[420,183],[361,2],[422,184],[424,185],[423,186],[373,2],[413,169],[426,187],[323,188],[412,189],[418,190],[248,2],[252,2],[251,2],[250,2],[255,2],[249,2],[258,2],[257,2],[254,2],[253,2],[256,2],[259,191],[247,2],[315,192],[314,2],[319,193],[316,194],[318,195],[321,193],[317,194],[228,196],[307,197],[476,198],[474,2],[503,199],[505,200],[469,201],[504,202],[216,203],[213,203],[246,2],[230,204],[229,205],[225,206],[226,207],[234,208],[262,208],[273,208],[309,209],[274,209],[218,210],[217,2],[313,211],[312,212],[311,213],[310,214],[219,215],[460,216],[261,217],[468,218],[433,219],[463,220],[467,221],[356,222],[355,223],[336,224],[322,225],[304,226],[306,227],[303,228],[425,229],[327,2],[491,2],[224,230],[427,231],[475,232],[334,2],[264,233],[341,234],[339,235],[266,236],[401,237],[470,2],[267,238],[402,238],[489,2],[488,2],[490,2],[472,2],[471,2],[404,239],[331,2],[301,240],[222,241],[280,2],[206,242],[268,2],[495,63],[205,2],[507,243],[288,63],[501,104],[287,244],[484,245],[285,243],[210,2],[509,246],[283,63],[284,63],[275,2],[204,2],[282,247],[281,248],[270,249],[345,39],[405,39],[421,2],[409,250],[408,2],[293,119],[214,2],[302,63],[478,131],[485,251],[86,63],[89,252],[90,253],[87,63],[88,2],[382,254],[377,255],[376,2],[375,256],[374,2],[483,257],[494,258],[496,259],[500,260],[551,261],[502,262],[506,263],[534,264],[510,264],[533,265],[512,266],[522,267],[523,268],[525,269],[529,270],[532,131],[531,2],[530,271],[410,272],[81,2],[82,2],[13,2],[14,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[57,2],[58,2],[60,2],[59,2],[61,2],[62,2],[10,2],[63,2],[64,2],[65,2],[11,2],[66,2],[67,2],[68,2],[69,2],[70,2],[1,2],[71,2],[72,2],[12,2],[76,2],[74,2],[79,2],[78,2],[73,2],[77,2],[75,2],[80,2],[117,273],[127,274],[116,273],[137,275],[108,276],[107,277],[136,271],[130,278],[135,279],[110,280],[124,281],[109,282],[133,283],[105,284],[104,271],[134,285],[106,286],[111,287],[112,2],[115,287],[102,2],[138,288],[128,289],[119,290],[120,291],[122,292],[118,293],[121,294],[131,271],[113,295],[114,296],[123,297],[103,298],[126,289],[125,287],[129,2],[132,299],[554,300],[553,301],[555,302],[556,303],[557,304],[559,305],[558,306],[539,307],[540,307],[541,307],[542,307],[543,307],[544,307],[545,307],[546,307],[548,308],[547,309],[538,310]],"affectedFilesPendingEmit":[565,562,552,560,537,554,553,555,556,557,559,558,539,540,541,542,543,544,545,546,548,547,538],"version":"5.9.3"}
\ No newline at end of file
new file mode 100644
@@ -0,0 +1 @@
1+{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./next.config.ts","./src/lib/types.ts","./src/data/arms.ts","./src/data/builds.ts","./src/data/classes.ts","./src/data/companions.ts","./src/data/i18n.ts","./src/data/progression.ts","./src/data/skellWeapons.ts","./src/data/skells.ts","./src/lib/engine.ts","./src/lib/engine.test.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./app/layout.tsx","./src/components/ControlPanel.tsx","./src/components/BuildCard.tsx","./src/components/ResultsSection.tsx","./src/components/SiteFooter.tsx","./src/components/SquadPanel.tsx","./src/components/Topbar.tsx","./src/components/TeamBuilder.tsx","./app/page.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[97,146,163,164,488,489,490,491,561],[97,146,163,164,561,563],[97,146,163,164,231,532,552,560,561,563,564],[97,146,163,164,488,489,490,491,563],[97,146,163,164,231,532,535,552,560,561,563],[97,146,163,164,231,530,533,551,561,563],[97,146,163,164,231,559,561,563],[97,146,163,164,533,534,535,561,563],[97,146,163,164,231,533,561,563],[97,143,144,146,163,164,561,563],[97,145,146,163,164,561,563],[146,163,164,561,563],[97,146,151,163,164,181,561,563],[97,146,147,152,157,163,164,166,178,189,561,563],[97,146,147,148,157,163,164,166,561,563],[92,93,94,97,146,163,164,561,563],[97,146,149,163,164,190,561,563],[97,146,150,151,158,163,164,167,561,563],[97,146,151,163,164,178,186,561,563],[97,146,152,154,157,163,164,166,561,563],[97,145,146,153,163,164,561,563],[97,146,154,155,163,164,561,563],[97,146,156,157,163,164,561,563],[97,145,146,157,163,164,561,563],[97,146,157,158,159,163,164,178,189,561,563],[97,146,157,158,159,163,164,173,178,181,561,563],[97,138,146,154,157,160,163,164,166,178,189,561,563],[97,146,157,158,160,161,163,164,166,178,186,189,561,563],[97,146,160,162,163,164,178,186,189,561,563],[95,96,97,98,99,100,101,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,561,563],[97,146,157,163,164,561,563],[97,146,163,164,165,189,561,563],[97,146,154,157,163,164,166,178,561,563],[97,146,163,164,167,561,563],[97,146,163,164,168,561,563],[97,145,146,163,164,169,561,563],[97,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,561,563],[97,146,163,164,171,561,563],[97,146,163,164,172,561,563],[97,146,157,163,164,173,174,561,563],[97,146,163,164,173,175,190,192,561,563],[97,146,158,163,164,561,563],[97,146,157,163,164,178,179,181,561,563],[97,146,163,164,180,181,561,563],[97,146,163,164,178,179,561,563],[97,146,163,164,181,561,563],[97,146,163,164,182,561,563],[97,143,146,163,164,178,183,189,561,563],[97,146,157,163,164,184,185,561,563],[97,146,163,164,184,185,561,563],[97,146,151,163,164,166,178,186,561,563],[97,146,163,164,187,561,563],[97,146,163,164,166,188,561,563],[97,146,160,163,164,172,189,561,563],[97,146,151,163,164,190,561,563],[97,146,163,164,178,191,561,563],[97,146,163,164,165,192,561,563],[97,146,163,164,193,561,563],[97,138,146,163,164,561,563],[97,138,146,157,159,163,164,169,178,181,189,191,192,194,561,563],[97,146,163,164,178,195,561,563],[85,89,97,146,163,164,197,198,199,200,201,483,528,561,563],[85,97,146,163,164,561,563],[85,89,97,146,163,164,197,198,199,200,464,483,528,561,563],[85,89,97,146,163,164,197,198,200,201,483,528,561,563],[85,97,146,163,164,201,464,465,561,563],[85,97,146,163,164,201,464,561,563],[85,89,97,146,163,164,198,199,200,201,483,528,561,563],[85,89,97,146,163,164,197,199,200,201,483,528,561,563],[83,84,97,146,163,164,561,563],[97,146,163,164,486,561,563],[97,146,163,164,488,489,490,491,561,563],[97,146,163,164,434,497,498,561,563],[97,146,163,164,206,207,209,221,245,360,371,479,561,563],[97,146,163,164,209,240,241,242,244,479,561,563],[97,146,163,164,209,377,379,381,382,384,479,481,561,563],[97,146,163,164,209,243,280,479,561,563],[97,146,163,164,207,209,220,221,227,233,238,359,360,361,370,479,481,561,563],[97,146,163,164,479,561,563],[97,146,163,164,216,222,241,261,356,561,563],[97,146,163,164,209,561,563],[97,146,163,164,202,216,222,561,563],[97,146,163,164,388,561,563],[97,146,163,164,385,386,388,561,563],[97,146,163,164,385,387,479,561,563],[97,146,160,163,164,261,458,476,561,563],[97,146,160,163,164,332,335,351,356,476,561,563],[97,146,160,163,164,304,476,561,563],[97,146,163,164,364,561,563],[97,146,163,164,363,364,365,561,563],[97,146,163,164,363,561,563],[91,97,146,160,163,164,202,209,221,227,233,239,241,245,246,259,260,327,357,358,371,479,483,561,563],[97,146,163,164,206,209,243,280,377,378,383,479,531,561,563],[97,146,163,164,243,531,561,563],[97,146,163,164,206,260,429,479,531,561,563],[97,146,163,164,531,561,563],[97,146,163,164,209,243,244,531,561,563],[97,146,163,164,380,531,561,563],[97,146,163,164,246,359,362,369,561,563],[85,97,146,163,164,434,561,563],[97,146,163,164,172,216,231,561,563],[97,146,163,164,216,231,561,563],[85,97,146,163,164,301,561,563],[85,97,146,163,164,231,561,563],[85,97,146,163,164,222,231,434,561,563],[97,146,163,164,216,287,301,302,513,520,561,563],[97,146,163,164,286,514,515,516,517,519,561,563],[97,146,163,164,337,561,563],[97,146,163,164,337,338,561,563],[97,146,163,164,220,222,289,290,561,563],[97,146,163,164,222,296,297,561,563],[97,146,163,164,222,291,299,561,563],[97,146,163,164,296,561,563],[97,146,163,164,214,222,289,290,291,292,293,294,295,296,299,561,563],[97,146,163,164,222,289,296,297,298,300,561,563],[97,146,163,164,222,290,292,293,561,563],[97,146,163,164,290,292,295,297,561,563],[97,146,163,164,518,561,563],[97,146,163,164,222,561,563],[85,97,146,163,164,210,507,561,563],[85,97,146,163,164,189,561,563],[85,97,146,163,164,243,278,561,563],[85,97,146,163,164,243,371,561,563],[97,146,163,164,276,281,561,563],[85,97,146,163,164,277,485,561,563],[97,146,163,164,549,561,563],[85,89,97,146,160,163,164,197,198,199,200,201,483,527,561,563],[97,146,160,163,164,222,561,563],[97,146,160,163,164,221,226,307,324,366,367,371,426,428,479,480,561,563],[97,146,163,164,259,368,561,563],[97,146,163,164,483,561,563],[97,146,163,164,208,561,563],[85,97,146,163,164,213,216,431,447,449,561,563],[97,146,163,164,172,216,431,446,447,448,530,561,563],[97,146,163,164,440,441,442,443,444,445,561,563],[97,146,163,164,442,561,563],[97,146,163,164,446,561,563],[97,146,163,164,231,395,396,398,561,563],[85,97,146,163,164,222,389,390,391,392,397,561,563],[97,146,163,164,395,397,561,563],[97,146,163,164,393,561,563],[97,146,163,164,394,561,563],[85,97,146,163,164,231,277,485,561,563],[85,97,146,163,164,231,484,485,561,563],[85,97,146,163,164,231,485,561,563],[97,146,163,164,324,325,561,563],[97,146,163,164,325,561,563],[97,146,160,163,164,480,485,561,563],[97,146,163,164,354,561,563],[97,145,146,163,164,353,561,563],[97,146,163,164,216,222,228,230,332,345,349,351,428,431,468,469,476,480,561,563],[97,146,163,164,222,271,293,561,563],[97,146,163,164,332,343,346,351,561,563],[85,97,146,163,164,213,216,332,335,351,354,388,435,436,437,438,439,450,451,452,453,454,455,456,457,531,561,563],[97,146,163,164,213,216,241,332,339,340,341,344,345,561,563],[97,146,163,164,178,222,241,343,350,431,432,476,561,563],[97,146,163,164,347,561,563],[97,146,160,163,164,172,210,222,226,236,268,269,272,324,327,392,426,427,468,479,480,481,483,531,561,563],[97,146,163,164,213,214,216,561,563],[97,146,163,164,332,561,563],[97,145,146,163,164,241,268,269,326,327,328,329,330,331,480,561,563],[97,146,163,164,351,561,563],[97,145,146,163,164,215,216,226,230,266,332,339,340,341,342,343,346,347,348,349,350,469,561,563],[97,146,160,163,164,266,267,339,480,481,561,563],[97,146,163,164,241,269,324,327,332,428,480,561,563],[97,146,160,163,164,479,481,561,563],[97,146,160,163,164,178,476,480,481,561,563],[97,146,160,163,164,172,202,216,221,228,230,233,236,243,263,268,269,270,271,272,307,308,310,313,315,318,319,320,321,323,371,426,428,476,479,480,481,561,563],[97,146,160,163,164,178,561,563],[97,146,163,164,209,210,211,239,476,477,478,483,485,531,561,563],[97,146,163,164,206,207,479,561,563],[97,146,163,164,400,561,563],[97,146,160,163,164,178,189,218,384,388,389,390,391,392,398,399,531,561,563],[97,146,163,164,172,189,202,216,218,230,233,269,308,313,323,324,377,404,405,406,412,415,416,426,428,476,479,561,563],[97,146,163,164,233,239,246,259,269,327,479,561,563],[97,146,160,163,164,189,210,221,230,269,410,476,479,561,563],[97,146,163,164,430,561,563],[97,146,160,163,164,400,413,414,423,561,563],[97,146,163,164,476,479,561,563],[97,146,163,164,329,469,561,563],[97,146,163,164,230,268,371,485,561,563],[97,146,160,163,164,172,208,313,373,377,406,412,415,418,476,561,563],[97,146,160,163,164,246,259,377,419,561,563],[97,146,163,164,209,270,371,421,479,481,561,563],[97,146,160,163,164,189,392,479,561,563],[97,146,160,163,164,243,270,371,372,373,382,400,420,422,479,561,563],[91,97,146,160,163,164,268,425,483,485,561,563],[97,146,163,164,322,426,561,563],[97,146,160,163,164,172,216,219,221,222,228,230,236,245,246,259,269,272,308,310,320,323,324,371,404,405,406,407,409,411,426,428,476,485,561,563],[97,146,160,163,164,178,246,412,417,423,476,561,563],[97,146,163,164,249,250,251,252,253,254,255,256,257,258,561,563],[97,146,163,164,263,314,561,563],[97,146,163,164,316,561,563],[97,146,163,164,314,561,563],[97,146,163,164,316,317,561,563],[97,146,160,163,164,220,221,222,226,227,480,561,563],[97,146,160,163,164,172,208,210,228,232,268,271,272,306,426,476,481,483,485,561,563],[97,146,160,163,164,172,189,212,219,220,230,232,269,424,469,475,480,561,563],[97,146,163,164,339,561,563],[97,146,163,164,340,561,563],[97,146,163,164,222,233,468,561,563],[97,146,163,164,341,561,563],[97,146,163,164,215,561,563],[97,146,163,164,217,229,561,563],[97,146,160,163,164,217,221,228,561,563],[97,146,163,164,224,229,561,563],[97,146,163,164,225,561,563],[97,146,163,164,217,218,561,563],[97,146,163,164,217,273,561,563],[97,146,163,164,217,561,563],[97,146,163,164,219,263,312,561,563],[97,146,163,164,311,561,563],[97,146,163,164,216,218,219,561,563],[97,146,163,164,219,309,561,563],[97,146,163,164,216,218,561,563],[97,146,163,164,268,371,561,563],[97,146,163,164,468,561,563],[97,146,160,163,164,189,228,230,234,268,371,425,428,431,432,433,459,460,463,467,469,476,480,561,563],[97,146,163,164,282,285,287,288,301,302,561,563],[85,97,146,163,164,199,200,201,231,461,462,561,563],[85,97,146,163,164,199,200,201,231,461,462,466,561,563],[97,146,163,164,355,561,563],[97,146,163,164,241,262,267,268,332,333,334,335,336,338,351,352,354,357,425,428,479,481,561,563],[97,146,163,164,301,561,563],[97,146,160,163,164,306,476,561,563],[97,146,163,164,306,561,563],[97,146,160,163,164,228,274,303,305,307,425,476,483,485,561,563],[97,146,163,164,282,283,284,285,287,288,301,302,484,561,563],[91,97,146,160,163,164,172,189,217,218,230,236,268,269,272,371,423,424,426,476,479,480,483,561,563],[97,146,163,164,213,216,223,561,563],[97,146,163,164,267,269,401,404,561,563],[97,146,163,164,267,402,470,471,472,473,474,561,563],[97,146,160,163,164,263,479,561,563],[97,146,160,163,164,561,563],[97,146,163,164,266,351,561,563],[97,146,163,164,265,561,563],[97,146,163,164,267,320,561,563],[97,146,163,164,264,266,479,561,563],[97,146,160,163,164,212,267,401,402,403,476,479,480,561,563],[85,97,146,163,164,216,222,300,561,563],[85,97,146,163,164,214,561,563],[97,146,163,164,204,205,561,563],[85,97,146,163,164,210,561,563],[85,97,146,163,164,216,286,561,563],[85,91,97,146,163,164,268,272,483,485,561,563],[97,146,163,164,210,507,508,561,563],[85,97,146,163,164,281,561,563],[85,97,146,163,164,172,189,208,275,277,279,280,485,561,563],[97,146,163,164,216,243,480,561,563],[97,146,163,164,216,408,561,563],[85,97,146,158,160,163,164,172,206,208,281,379,483,484,561,563],[85,97,146,163,164,197,198,199,200,201,483,528,561,563],[85,86,87,88,89,97,146,163,164,561,563],[97,146,151,163,164,561,563],[97,146,163,164,374,375,376,561,563],[97,146,163,164,374,561,563],[85,89,97,146,160,162,163,164,172,196,197,198,199,200,201,202,208,236,241,418,446,481,482,485,528,561,563],[97,146,163,164,493,561,563],[97,146,163,164,495,561,563],[97,146,163,164,499,561,563],[97,146,163,164,550,561,563],[97,146,163,164,501,561,563],[97,146,163,164,503,504,505,561,563],[97,146,163,164,509,561,563],[90,97,146,163,164,487,492,494,496,500,502,506,510,512,522,523,525,529,530,531,532,561,563],[97,146,163,164,511,561,563],[97,146,163,164,521,561,563],[97,146,163,164,277,561,563],[97,146,163,164,524,561,563],[97,145,146,163,164,267,401,402,404,470,471,473,474,526,528,561,563],[97,146,163,164,196,561,563],[97,146,163,164,178,196,561,563],[97,110,114,146,163,164,189,561,563],[97,110,146,163,164,178,189,561,563],[97,105,146,163,164,561,563],[97,107,110,146,163,164,186,189,561,563],[97,146,163,164,166,186,561,563],[97,105,146,163,164,196,561,563],[97,107,110,146,163,164,166,189,561,563],[97,102,103,106,109,146,157,163,164,178,189,561,563],[97,110,117,146,163,164,561,563],[97,102,108,146,163,164,561,563],[97,110,131,132,146,163,164,561,563],[97,106,110,146,163,164,181,189,196,561,563],[97,131,146,163,164,196,561,563],[97,104,105,146,163,164,196,561,563],[97,110,146,163,164,561,563],[97,104,105,106,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,146,163,164,561,563],[97,110,125,146,163,164,561,563],[97,110,117,118,146,163,164,561,563],[97,108,110,118,119,146,163,164,561,563],[97,109,146,163,164,561,563],[97,102,105,110,146,163,164,561,563],[97,110,114,118,119,146,163,164,561,563],[97,114,146,163,164,561,563],[97,108,110,113,146,163,164,189,561,563],[97,102,107,110,117,146,163,164,561,563],[97,146,163,164,178,561,563],[97,105,110,131,146,163,164,194,196,561,563],[97,146,163,164,231,538,539,540,543,547,561,563],[97,146,163,164,231,538,541,543,547,561,563],[85,97,146,163,164,231,538,543,547,554,561,563],[97,146,163,164,231,543,561,563],[97,146,163,164,231,542,543,561,563],[85,97,146,163,164,231,538,541,543,547,553,555,556,557,558,561,563],[97,146,163,164,231,538,543,561,563],[97,146,163,164,231,538,561,563],[97,144,146,163,164,183,231,542,544,547,561,563],[97,146,163,164,231,538,540,541,542,544,545,546,561,563],[97,146,163,164,231,561,563]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"814d5c7384f3ca276e9dc4bcfde5545801a3ea0bfae09916b3336774e662fd1b","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"d61e0a64cd175208ac0b83670151a9a6b5916f0d1ffcdc5c29c90b1cebfc5045","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"66be1299a7a3129ceb488b340c291cf575bebb0e337f92e169dec38231472e34","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"b838d4c72740eb0afd284bf7575b74c624b105eff2e8c7b4aeead57e7ac320ff","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"48dcc919f76c040a999c0d46d2bf25ab089645ca21b837f120b222f56a86cd76","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"cd9304972e6d616197fb44fce00540a904f38b54306a1951b5dbeaf3c01ab5bd","impliedFormat":1},{"version":"77438e2c397a3db78407621cfc57241a305b310ddea2c185f1d555248297f587","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"7715134a0cf07dd41a9da2895d708625a3a303a0385e355ecaaf0b8bfaef2550","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e5c939d896565dcac0f6fbdbada11284e7728ef26a069561c09aa5aa4a788393","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"5a16e93d5d53d987dddda1ec606c9821f6bd31d1bdf0635e05e3841312cefa8b","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"b55eb9f72166093b5460d34b34f5d8699c968de3bc3fc696e40f2c93f2ebf650","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"c30436b130b6218b7714314dc41d3f459590db4bdf099eecd51cb1bda32109a8","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"6ee598cdfdd0fa52039dca135b3dfff7b49035dc13292143e0a93843e3861967","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"eb5acb58487367e502d994b57e2c58255d8241f481ea8efa8e79af23af3f41c2","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"f282cb0bc62e0cc771d4c2e7ece6359a5f4a3dff664584e97476fd37154816bb","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"a384610388221cd70cffb4503cee7853b8b076f2b4a55324b20a4bdbd25a3538","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651",{"version":"f5a1676c44601c4291320391570b3a9aafbae9a6bea721b62dd186da9a827911","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"2416d0d4c9ebbd4024126ab3301cb91dc1eeed7d44dd05aed67673b511ed17b6","signature":"ce0ffe631a9378a6bd5c2f1f8666814bc8d652e271a8fa8fd2fbf8285b42d41b"},{"version":"c91b304a3ac178ac2f76b66849e748f24e02c6590d20822f16d043a0128195b0","signature":"9f51faf228d2d846d029163704048e067899eabe3a918812cf4fc2012797d6bd"},"0c47b3c89a89e3ab58d589e45a366640942126180a65a8046a3bb313619f5b16","d2a550e6c7f7b40bbe0d1edf75cf75c0d7786ce13995942be1b91cc94a2d3ebd","212641fbc18ca00ce5b86a1d38b8d2b6bdb25edb0a4b33aa0b1f432e451a7fe0",{"version":"00796db515bf7113de1655012c3e76eefd520ca7781850d9f22aa70393ac9b6c","signature":"bce8d9e7d0eb2e6bd87f370b2423cd88478e9976ba93a0d47a8f938663d7641a"},"48e6b3f0bd8522db70ffadce7163f4f32cdc94caa5f4123069476373b1bbdb07",{"version":"000fd9e9b613e4e7fe7bed5d88055b88debb457c5d2627bdc6e71b86e82ead7d","signature":"5bc959e9f06337da9f6a4b2f93d16241b555bf16b9eb8f92da54345b98e92660"},{"version":"671c373f2b82d6dfae3e4645d81cef22a655318f8901d0026c90f86e00d98934","signature":"e4617002b911948b96cb103cf91de9a393da95376df0d95dd4b1772393660214"},{"version":"5c483707086727b2ddc0e0ad27b5c85f1b6b3d05073d1da32f16240b0abe7aa5","signature":"f41b606a134a3d2dd2459087028332e5ff4c2a9c4d1edba462f7b994a2171961"},{"version":"8bbc48d0aa0989a5997918da017f795cfda4ee15f0aedf646007f87f8bcdf5ed","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"01d3478be006d10a3abefe929996ed5decf8d809c242bfe7f6de3741e4e761f2","signature":"01a977ade994fe0de990222140f158a0dc3b03529994c449aa39333d0facac02"},"bffef72149873238af0be5150619ce1a7aace623716b0fd07cd844b01c92db13",{"version":"e32d83eedbc19c32a21910d66a8c10113146ff920a3825f17d3764d239683b06","signature":"61ab01628505db9d3ef340b0546d4e9acbe3bd07784caaf6ab8ce150ab1f4c17"},"3070f5c17e6123f474c2a2c5aa08fd6ead063e108e50914a4fe789e0e578ac0a","084c4993b66cd903125a835a61a122716256b53716f8dd6761722b6944dc42c3","7f547bbf58c638b5be167fae5fa5291f9470424f5ab4277e9ad336cc3ad9dc46","c331b7056801e4bc7b46732e77173277b55e0367de6618bae2f85c7c7ce27b56","c204df8b51ac1f124513782ebc1e2596c3edfce22aad7d79f1a18f0500287684","d46f111f0daf006ae96e904cd3c8e24d4e3ca682b455001af31e8207a1b352fd","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","8c738d7ab02122bec55d98eab2f5e875f5306ebffe56a6be96f2da0916a7ea71","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"a384610388221cd70cffb4503cee7853b8b076f2b4a55324b20a4bdbd25a3538","affectsGlobalScope":true},"ac965c40df1c4a3d53cebda90c50063ebda4522b0a054741dc3d2bd98bc852e6",{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[[535,548],[552,565]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[563,1],[564,2],[565,3],[561,4],[535,2],[562,5],[552,6],[560,7],[536,8],[537,9],[379,2],[566,2],[567,2],[568,2],[143,10],[144,10],[145,11],[97,12],[146,13],[147,14],[148,15],[92,2],[95,16],[93,2],[94,2],[149,17],[150,18],[151,19],[152,20],[153,21],[154,22],[155,22],[156,23],[157,24],[158,25],[159,26],[98,2],[96,2],[160,27],[161,28],[162,29],[196,30],[163,31],[164,2],[165,32],[166,33],[167,34],[168,35],[169,36],[170,37],[171,38],[172,39],[173,40],[174,40],[175,41],[176,2],[177,42],[178,43],[180,44],[179,45],[181,46],[182,47],[183,48],[184,49],[185,50],[186,51],[187,52],[188,53],[189,54],[190,55],[191,56],[192,57],[193,58],[99,2],[100,2],[101,2],[139,59],[140,2],[141,2],[142,46],[194,60],[195,61],[200,62],[464,63],[201,64],[199,65],[466,66],[465,67],[197,68],[462,2],[198,69],[83,2],[85,70],[461,63],[231,63],[84,2],[487,71],[492,72],[499,73],[482,74],[235,2],[243,75],[383,76],[386,77],[358,2],[371,78],[378,79],[260,2],[360,2],[241,2],[357,80],[403,81],[242,2],[233,82],[385,83],[387,84],[388,85],[459,86],[352,87],[305,88],[365,89],[366,90],[364,91],[363,2],[359,92],[384,93],[244,94],[429,2],[430,95],[271,96],[245,97],[272,96],[308,96],[211,96],[381,98],[380,2],[370,99],[477,2],[220,2],[498,100],[437,101],[438,102],[434,103],[516,2],[335,2],[439,104],[435,105],[521,106],[520,107],[515,2],[286,2],[338,108],[337,2],[514,109],[436,63],[291,110],[298,111],[300,112],[290,2],[295,113],[297,114],[299,115],[294,116],[292,2],[296,117],[517,2],[513,2],[519,118],[518,2],[289,119],[508,120],[511,121],[279,122],[278,123],[277,124],[524,63],[276,125],[265,2],[526,2],[550,126],[549,2],[527,63],[528,127],[203,2],[367,128],[368,129],[369,130],[207,2],[372,2],[227,131],[202,2],[451,63],[209,132],[450,133],[449,134],[440,2],[441,2],[448,2],[443,2],[446,135],[442,2],[444,136],[447,137],[445,136],[240,2],[237,2],[238,96],[392,2],[397,138],[398,139],[396,140],[394,141],[395,142],[390,2],[457,104],[232,104],[486,143],[493,144],[497,145],[326,146],[325,2],[320,2],[473,147],[481,148],[353,149],[354,150],[432,151],[342,2],[455,152],[330,63],[347,153],[458,154],[343,2],[346,155],[344,2],[456,156],[453,157],[452,2],[454,2],[350,2],[428,158],[215,159],[328,160],[332,161],[348,162],[351,163],[340,164],[333,165],[480,166],[406,167],[324,168],[212,169],[479,170],[208,171],[399,172],[391,2],[400,173],[417,174],[389,2],[416,175],[91,2],[411,176],[236,2],[431,177],[407,2],[221,2],[223,2],[362,2],[415,178],[239,2],[263,179],[349,180],[269,181],[329,2],[414,2],[393,2],[419,182],[420,183],[361,2],[422,184],[424,185],[423,186],[373,2],[413,169],[426,187],[323,188],[412,189],[418,190],[248,2],[252,2],[251,2],[250,2],[255,2],[249,2],[258,2],[257,2],[254,2],[253,2],[256,2],[259,191],[247,2],[315,192],[314,2],[319,193],[316,194],[318,195],[321,193],[317,194],[228,196],[307,197],[476,198],[474,2],[503,199],[505,200],[469,201],[504,202],[216,203],[213,203],[246,2],[230,204],[229,205],[225,206],[226,207],[234,208],[262,208],[273,208],[309,209],[274,209],[218,210],[217,2],[313,211],[312,212],[311,213],[310,214],[219,215],[460,216],[261,217],[468,218],[433,219],[463,220],[467,221],[356,222],[355,223],[336,224],[322,225],[304,226],[306,227],[303,228],[425,229],[327,2],[491,2],[224,230],[427,231],[475,232],[334,2],[264,233],[341,234],[339,235],[266,236],[401,237],[470,2],[267,238],[402,238],[489,2],[488,2],[490,2],[472,2],[471,2],[404,239],[331,2],[301,240],[222,241],[280,2],[206,242],[268,2],[495,63],[205,2],[507,243],[288,63],[501,104],[287,244],[484,245],[285,243],[210,2],[509,246],[283,63],[284,63],[275,2],[204,2],[282,247],[281,248],[270,249],[345,39],[405,39],[421,2],[409,250],[408,2],[293,119],[214,2],[302,63],[478,131],[485,251],[86,63],[89,252],[90,253],[87,63],[88,2],[382,254],[377,255],[376,2],[375,256],[374,2],[483,257],[494,258],[496,259],[500,260],[551,261],[502,262],[506,263],[534,264],[510,264],[533,265],[512,266],[522,267],[523,268],[525,269],[529,270],[532,131],[531,2],[530,271],[410,272],[81,2],[82,2],[13,2],[14,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[57,2],[58,2],[60,2],[59,2],[61,2],[62,2],[10,2],[63,2],[64,2],[65,2],[11,2],[66,2],[67,2],[68,2],[69,2],[70,2],[1,2],[71,2],[72,2],[12,2],[76,2],[74,2],[79,2],[78,2],[73,2],[77,2],[75,2],[80,2],[117,273],[127,274],[116,273],[137,275],[108,276],[107,277],[136,271],[130,278],[135,279],[110,280],[124,281],[109,282],[133,283],[105,284],[104,271],[134,285],[106,286],[111,287],[112,2],[115,287],[102,2],[138,288],[128,289],[119,290],[120,291],[122,292],[118,293],[121,294],[131,271],[113,295],[114,296],[123,297],[103,298],[126,289],[125,287],[129,2],[132,299],[554,300],[553,301],[555,302],[556,303],[557,304],[559,305],[558,306],[539,307],[540,307],[541,307],[542,307],[543,307],[544,307],[545,307],[546,307],[548,308],[547,309],[538,310]],"affectedFilesPendingEmit":[565,562,552,560,537,554,553,555,556,557,559,558,539,540,541,542,543,544,545,546,548,547,538],"version":"5.9.3"}
\ No newline at end of file\ No newline at end of file